diff options
author | INADA Naoki <inada-n@klab.com> | 2012-09-21 13:59:35 +0900 |
---|---|---|
committer | INADA Naoki <inada-n@klab.com> | 2012-09-21 13:59:35 +0900 |
commit | 3b45a51d6171f0caff9b2d6c563a00dc083a0efb (patch) | |
tree | 757f85e87963aeb0371986416cbad0fb17e88717 | |
parent | 0297b36bda332fe21ab7d4c4c549cc68ccd344bc (diff) | |
parent | f14d926e1d885bece2c6f5bb5af94f3463fd21f5 (diff) | |
download | msgpack-python-3b45a51d6171f0caff9b2d6c563a00dc083a0efb.tar.gz |
Merge branch 'master' of github.com:msgpack/msgpack-python
-rw-r--r-- | msgpack/_msgpack.pyx | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/msgpack/_msgpack.pyx b/msgpack/_msgpack.pyx index 15bf5a7..aef1228 100644 --- a/msgpack/_msgpack.pyx +++ b/msgpack/_msgpack.pyx @@ -26,6 +26,7 @@ cdef extern from "pack.h": int msgpack_pack_long(msgpack_packer* pk, long d) int msgpack_pack_long_long(msgpack_packer* pk, long long d) int msgpack_pack_unsigned_long_long(msgpack_packer* pk, unsigned long long d) + int msgpack_pack_float(msgpack_packer* pk, float d) int msgpack_pack_double(msgpack_packer* pk, double d) int msgpack_pack_array(msgpack_packer* pk, size_t l) int msgpack_pack_map(msgpack_packer* pk, size_t l) @@ -54,6 +55,7 @@ cdef class Packer(object): cdef object _berrors cdef char *encoding cdef char *unicode_errors + cdef bool use_float def __cinit__(self): cdef int buf_size = 1024*1024 @@ -63,7 +65,8 @@ cdef class Packer(object): self.pk.buf_size = buf_size self.pk.length = 0 - def __init__(self, default=None, encoding='utf-8', unicode_errors='strict'): + def __init__(self, default=None, encoding='utf-8', unicode_errors='strict', use_float=False): + self.use_float = use_float if default is not None: if not PyCallable_Check(default): raise TypeError("default must be a callable.") @@ -90,7 +93,8 @@ cdef class Packer(object): cdef long long llval cdef unsigned long long ullval cdef long longval - cdef double fval + cdef float fval + cdef double dval cdef char* rawval cdef int ret cdef dict d @@ -116,8 +120,12 @@ cdef class Packer(object): longval = o ret = msgpack_pack_long(&self.pk, longval) elif PyFloat_Check(o): - fval = o - ret = msgpack_pack_double(&self.pk, fval) + if self.use_float: + fval = o + ret = msgpack_pack_float(&self.pk, fval) + else: + dval = o + ret = msgpack_pack_double(&self.pk, dval) elif PyBytes_Check(o): rawval = o ret = msgpack_pack_raw(&self.pk, len(o)) |