summaryrefslogtreecommitdiff
path: root/msgpack/unpack_template.h
diff options
context:
space:
mode:
authorINADA Naoki <methane@users.noreply.github.com>2019-01-07 21:10:40 +0900
committerGitHub <noreply@github.com>2019-01-07 21:10:40 +0900
commitf46523b1af7ff2d408da8500ea36a4f9f2abe915 (patch)
tree19b7ccb83539b1e25162bef13bce1102f15e5da6 /msgpack/unpack_template.h
parent197e30723a242e3ba31f9634b3263ae4cb2937b1 (diff)
downloadmsgpack-python-f46523b1af7ff2d408da8500ea36a4f9f2abe915.tar.gz
use _PyFloat APIs to (de)serialize (#340)
Diffstat (limited to 'msgpack/unpack_template.h')
-rw-r--r--msgpack/unpack_template.h14
1 files changed, 4 insertions, 10 deletions
diff --git a/msgpack/unpack_template.h b/msgpack/unpack_template.h
index a78b7fa..9924b9c 100644
--- a/msgpack/unpack_template.h
+++ b/msgpack/unpack_template.h
@@ -243,17 +243,11 @@ static inline int unpack_execute(unpack_context* ctx, const char* data, Py_ssize
_msgpack_load32(uint32_t,n)+1,
_ext_zero);
case CS_FLOAT: {
- union { uint32_t i; float f; } mem;
- mem.i = _msgpack_load32(uint32_t,n);
- push_fixed_value(_float, mem.f); }
+ double f = _PyFloat_Unpack4((unsigned char*)n, 0);
+ push_fixed_value(_float, f); }
case CS_DOUBLE: {
- union { uint64_t i; double f; } mem;
- mem.i = _msgpack_load64(uint64_t,n);
-#if defined(__arm__) && !(__ARM_EABI__) // arm-oabi
- // https://github.com/msgpack/msgpack-perl/pull/1
- mem.i = (mem.i & 0xFFFFFFFFUL) << 32UL | (mem.i >> 32UL);
-#endif
- push_fixed_value(_double, mem.f); }
+ double f = _PyFloat_Unpack8((unsigned char*)n, 0);
+ push_fixed_value(_double, f); }
case CS_UINT_8:
push_fixed_value(_uint8, *(uint8_t*)n);
case CS_UINT_16: