summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorINADA Naoki <inada-n@klab.com>2012-09-21 13:59:35 +0900
committerINADA Naoki <inada-n@klab.com>2012-09-21 13:59:35 +0900
commit3b45a51d6171f0caff9b2d6c563a00dc083a0efb (patch)
tree757f85e87963aeb0371986416cbad0fb17e88717
parent0297b36bda332fe21ab7d4c4c549cc68ccd344bc (diff)
parentf14d926e1d885bece2c6f5bb5af94f3463fd21f5 (diff)
downloadmsgpack-python-3b45a51d6171f0caff9b2d6c563a00dc083a0efb.tar.gz
Merge branch 'master' of github.com:msgpack/msgpack-python
-rw-r--r--msgpack/_msgpack.pyx16
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))