Skip to content

Commit 3b45a51

Browse files
committed
Merge branch 'master' of github.com:msgpack/msgpack-python
2 parents 0297b36 + f14d926 commit 3b45a51

File tree

1 file changed

+12
-4
lines changed

1 file changed

+12
-4
lines changed

msgpack/_msgpack.pyx

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ cdef extern from "pack.h":
2626
int msgpack_pack_long(msgpack_packer* pk, long d)
2727
int msgpack_pack_long_long(msgpack_packer* pk, long long d)
2828
int msgpack_pack_unsigned_long_long(msgpack_packer* pk, unsigned long long d)
29+
int msgpack_pack_float(msgpack_packer* pk, float d)
2930
int msgpack_pack_double(msgpack_packer* pk, double d)
3031
int msgpack_pack_array(msgpack_packer* pk, size_t l)
3132
int msgpack_pack_map(msgpack_packer* pk, size_t l)
@@ -54,6 +55,7 @@ cdef class Packer(object):
5455
cdef object _berrors
5556
cdef char *encoding
5657
cdef char *unicode_errors
58+
cdef bool use_float
5759

5860
def __cinit__(self):
5961
cdef int buf_size = 1024*1024
@@ -63,7 +65,8 @@ cdef class Packer(object):
6365
self.pk.buf_size = buf_size
6466
self.pk.length = 0
6567

66-
def __init__(self, default=None, encoding='utf-8', unicode_errors='strict'):
68+
def __init__(self, default=None, encoding='utf-8', unicode_errors='strict', use_float=False):
69+
self.use_float = use_float
6770
if default is not None:
6871
if not PyCallable_Check(default):
6972
raise TypeError("default must be a callable.")
@@ -90,7 +93,8 @@ cdef class Packer(object):
9093
cdef long long llval
9194
cdef unsigned long long ullval
9295
cdef long longval
93-
cdef double fval
96+
cdef float fval
97+
cdef double dval
9498
cdef char* rawval
9599
cdef int ret
96100
cdef dict d
@@ -116,8 +120,12 @@ cdef class Packer(object):
116120
longval = o
117121
ret = msgpack_pack_long(&self.pk, longval)
118122
elif PyFloat_Check(o):
119-
fval = o
120-
ret = msgpack_pack_double(&self.pk, fval)
123+
if self.use_float:
124+
fval = o
125+
ret = msgpack_pack_float(&self.pk, fval)
126+
else:
127+
dval = o
128+
ret = msgpack_pack_double(&self.pk, dval)
121129
elif PyBytes_Check(o):
122130
rawval = o
123131
ret = msgpack_pack_raw(&self.pk, len(o))

0 commit comments

Comments
 (0)