diff options
author | Bas Westerbaan <bas@westerbaan.name> | 2013-01-29 02:15:29 +0100 |
---|---|---|
committer | Bas Westerbaan <bas@westerbaan.name> | 2013-01-29 02:15:29 +0100 |
commit | 94925acb124998aaf9438e7c8152fbfbb7d5d8a8 (patch) | |
tree | e9be7472450d7cbcf75586c6e2f102038cffb4f9 | |
parent | af9c9ca2c9cae01cf603da90530b9ba396007e5b (diff) | |
download | msgpack-python-94925acb124998aaf9438e7c8152fbfbb7d5d8a8.tar.gz |
fallback: do not use dynamic format strings for struct.(un)pack
Increases performance on PyPy.
-rw-r--r-- | msgpack/fallback.py | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/msgpack/fallback.py b/msgpack/fallback.py index d6fd533..fe2b1ac 100644 --- a/msgpack/fallback.py +++ b/msgpack/fallback.py @@ -258,7 +258,7 @@ class Unpacker(object): obj = struct.unpack("b", chr(b))[0] elif b & 0b11100000 == 0b10100000: n = b & 0b00011111 - obj = struct.unpack("%ds" % n, self._fb_read(n, write_bytes))[0] + obj = self._fb_read(n, write_bytes) typ = TYPE_RAW elif b & 0b11110000 == 0b10010000: n = b & 0b00001111 @@ -294,11 +294,11 @@ class Unpacker(object): obj = struct.unpack(">q", self._fb_read(8, write_bytes))[0] elif b == 0xda: n = struct.unpack(">H", self._fb_read(2, write_bytes))[0] - obj = struct.unpack("%ds" % n, self._fb_read(n, write_bytes))[0] + obj = self._fb_read(n, write_bytes) typ = TYPE_RAW elif b == 0xdb: n = struct.unpack(">I", self._fb_read(4, write_bytes))[0] - obj = struct.unpack("%ds" % n, self._fb_read(n, write_bytes))[0] + obj = self._fb_read(n, write_bytes) typ = TYPE_RAW elif b == 0xdc: n = struct.unpack(">H", self._fb_read(2, write_bytes))[0] @@ -433,9 +433,11 @@ class Packer(object): self.buffer.write(chr(0xa0 + n)) return self.buffer.write(obj) if n <= 0xffff: - return self.buffer.write(struct.pack(">BH%ds" % n,0xda, n, obj)) + self.buffer.write(struct.pack(">BH", 0xda, n)) + return self.buffer.write(obj) if n <= 0xffffffff: - return self.buffer.write(struct.pack(">BI%ds" % n,0xdb, n, obj)) + self.buffer.write(struct.pack(">BI", 0xdb, n)) + return self.buffer.write(obj) raise PackValueError("String is too large") if isinstance(obj, float): if self.use_float: |