@@ -30,6 +30,7 @@ cdef extern from "pack.h":
3030 int msgpack_pack_long(msgpack_packer* pk, long d)
3131 int msgpack_pack_long_long(msgpack_packer* pk, long long d)
3232 int msgpack_pack_unsigned_long_long(msgpack_packer* pk, unsigned long long d)
33+ int msgpack_pack_float(msgpack_packer* pk, float d)
3334 int msgpack_pack_double(msgpack_packer* pk, double d)
3435 int msgpack_pack_array(msgpack_packer* pk, size_t l)
3536 int msgpack_pack_map(msgpack_packer* pk, size_t l)
@@ -58,6 +59,7 @@ cdef class Packer(object):
5859 cdef object _berrors
5960 cdef char * encoding
6061 cdef char * unicode_errors
62+ cdef bool use_float
6163
6264 def __cinit__ (self ):
6365 cdef int buf_size = 1024 * 1024
@@ -67,7 +69,8 @@ cdef class Packer(object):
6769 self .pk.buf_size = buf_size
6870 self .pk.length = 0
6971
70- def __init__ (self , default = None , encoding = ' utf-8' , unicode_errors = ' strict' ):
72+ def __init__ (self , default = None , encoding = ' utf-8' , unicode_errors = ' strict' , use_float = False ):
73+ self .use_float = use_float
7174 if default is not None :
7275 if not PyCallable_Check(default):
7376 raise TypeError (" default must be a callable." )
@@ -94,7 +97,8 @@ cdef class Packer(object):
9497 cdef long long llval
9598 cdef unsigned long long ullval
9699 cdef long longval
97- cdef double fval
100+ cdef float fval
101+ cdef double dval
98102 cdef char * rawval
99103 cdef int ret
100104 cdef dict d
@@ -120,8 +124,12 @@ cdef class Packer(object):
120124 longval = o
121125 ret = msgpack_pack_long(& self .pk, longval)
122126 elif PyFloat_Check(o):
123- fval = o
124- ret = msgpack_pack_double(& self .pk, fval)
127+ if self .use_float:
128+ fval = o
129+ ret = msgpack_pack_float(& self .pk, fval)
130+ else :
131+ dval = o
132+ ret = msgpack_pack_double(& self .pk, dval)
125133 elif PyBytes_Check(o):
126134 rawval = o
127135 ret = msgpack_pack_raw(& self .pk, len (o))
0 commit comments