@@ -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