Skip to content

Commit 23b61d5

Browse files
committed
optimize number pack operations
1 parent 73ab1c8 commit 23b61d5

1 file changed

Lines changed: 37 additions & 42 deletions

File tree

src/msgpack_stream/_msgpack.py

Lines changed: 37 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -13,18 +13,29 @@
1313
)
1414

1515
# deference for performance
16-
u8_b_pack = u8_b_t.pack
17-
u16_b_pack = u16_b_t.pack
18-
u32_b_pack = u32_b_t.pack
19-
u64_b_pack = u64_b_t.pack
20-
s8_b_pack = s8_b_t.pack
21-
s16_b_pack = s16_b_t.pack
22-
s32_b_pack = s32_b_t.pack
23-
s64_b_pack = s64_b_t.pack
24-
f_b_pack = f64_b_t.pack
16+
17+
# u8_b_st = u8_b_t.struct
18+
u16_b_st = u16_b_t.struct
19+
u32_b_st = u32_b_t.struct
20+
u64_b_st = u64_b_t.struct
21+
s8_b_st = s8_b_t.struct
22+
s16_b_st = s16_b_t.struct
23+
s32_b_st = s32_b_t.struct
24+
s64_b_st = s64_b_t.struct
25+
f_b_st = f64_b_t.struct
2526

2627
if os.environ.get("MSGPACK_PACK_FLOAT32"):
27-
f_b_pack = f32_b_t.pack
28+
f_b_st = f32_b_t.struct
29+
30+
# u8_b_pack = u8_b_st.pack
31+
u16_b_pack = u16_b_st.pack
32+
u32_b_pack = u32_b_st.pack
33+
u64_b_pack = u64_b_st.pack
34+
s8_b_pack = s8_b_st.pack
35+
s16_b_pack = s16_b_st.pack
36+
s32_b_pack = s32_b_st.pack
37+
s64_b_pack = s64_b_st.pack
38+
f_b_pack = f_b_st.pack
2839

2940
u8_b_unpack = u8_b_t.unpack
3041
u16_b_unpack = u16_b_t.unpack
@@ -51,46 +62,35 @@ def pack_stream(stream, obj):
5162
elif i < 0: # wider negative
5263
u_i = -i
5364
if u_i <= 0x80:
54-
stream.write(b"\xd0")
55-
s8_b_pack(stream, i)
65+
stream.write(b"\xd0" + s8_b_pack(i))
5666
elif u_i <= 0x80_00:
57-
stream.write(b"\xd1")
58-
s16_b_pack(stream, i)
67+
stream.write(b"\xd1" + s16_b_pack(i))
5968
elif u_i <= 0x80_00_00_00:
60-
stream.write(b"\xd2")
61-
s32_b_pack(stream, i)
69+
stream.write(b"\xd2" + s32_b_pack(i))
6270
elif u_i <= 0x80_00_00_00_00_00_00_00:
63-
stream.write(b"\xd3")
64-
s64_b_pack(stream, i)
71+
stream.write(b"\xd3" + s64_b_pack(i))
6572
else:
6673
raise ValueError("int too large")
6774
elif i <= 0xFF:
68-
stream.write(b"\xcc")
69-
u8_b_pack(stream, i)
75+
stream.write(b"\xcc" + _B[i])
7076
elif i <= 0xFF_FF:
71-
stream.write(b"\xcd")
72-
u16_b_pack(stream, i)
77+
stream.write(b"\xcd" + u16_b_pack(i))
7378
elif i <= 0xFF_FF_FF_FF:
74-
stream.write(b"\xce")
75-
u32_b_pack(stream, i)
79+
stream.write(b"\xce" + u32_b_pack(i))
7680
elif i <= 0xFF_FF_FF_FF_FF_FF_FF_FF:
77-
stream.write(b"\xcf")
78-
u64_b_pack(stream, i)
81+
stream.write(b"\xcf" + u64_b_pack(i))
7982
else:
8083
raise ValueError("uint too large")
8184
elif _type is float:
82-
stream.write(b"\xcb")
83-
f_b_pack(stream, obj)
85+
stream.write(b"\xcb" + f_b_pack(obj))
8486
elif _type is dict:
8587
ml = len(obj)
8688
if ml <= 0x0F:
8789
stream.write(_B[0x80 | ml])
8890
elif ml <= 0xFF_FF:
89-
stream.write(b"\xde")
90-
u16_b_pack(stream, ml)
91+
stream.write(b"\xde" + u16_b_pack(ml))
9192
elif ml <= 0xFF_FF_FF_FF:
92-
stream.write(b"\xdf")
93-
u32_b_pack(stream, ml)
93+
stream.write(b"\xdf" + u32_b_pack(ml))
9494
else:
9595
raise ValueError("map too large", obj)
9696
for k, v in obj.items():
@@ -101,11 +101,9 @@ def pack_stream(stream, obj):
101101
if al <= 0x0F:
102102
stream.write(_B[0x90 | al])
103103
elif al <= 0xFF_FF:
104-
stream.write(b"\xdc")
105-
u16_b_pack(stream, al)
104+
stream.write(b"\xdc" + u16_b_pack(al))
106105
elif al <= 0xFF_FF_FF_FF:
107-
stream.write(b"\xdd")
108-
u32_b_pack(stream, al)
106+
stream.write(b"\xdd" + u32_b_pack(al))
109107
else:
110108
raise ValueError("array too large", obj)
111109
for v in obj:
@@ -131,14 +129,11 @@ def pack_stream(stream, obj):
131129
elif _type is bytes:
132130
bl = len(obj)
133131
if bl <= 0xFF:
134-
stream.write(b"\xc4")
135-
u8_b_pack(stream, bl)
132+
stream.write(b"\xc4" + _B[bl])
136133
elif bl <= 0xFF_FF:
137-
stream.write(b"\xc5")
138-
u16_b_pack(stream, bl)
134+
stream.write(b"\xc5" + u16_b_pack(bl))
139135
elif bl <= 0xFF_FF_FF_FF:
140-
stream.write(b"\xc6")
141-
u32_b_pack(stream, bl)
136+
stream.write(b"\xc6" + u32_b_pack(bl))
142137
else:
143138
raise ValueError("bin too large", obj)
144139
stream.write(obj)

0 commit comments

Comments
 (0)