Skip to content

Commit e63a943

Browse files
author
TobiasSimon
committed
added float serialization support
1 parent f74ce3c commit e63a943

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

Comments
 (0)