Author: Justin Peel <[email protected]>
Branch:
Changeset: r46841:824c34520e40
Date: 2011-08-27 22:34 -0600
http://bitbucket.org/pypy/pypy/changeset/824c34520e40/
Log: speed up unpacking of integers
diff --git a/pypy/module/struct/formatiterator.py
b/pypy/module/struct/formatiterator.py
--- a/pypy/module/struct/formatiterator.py
+++ b/pypy/module/struct/formatiterator.py
@@ -154,6 +154,13 @@
self.inputpos = end
return s
+ def get_pos_and_advance(self, count):
+ pos = self.inputpos
+ self.inputpos += count
+ if self.inputpos > len(self.input):
+ raise StructError("unpack str size too short for format")
+ return pos
+
def appendobj(self, value):
self.result_w.append(self.space.wrap(value))
appendobj._annspecialcase_ = 'specialize:argtype(1)'
diff --git a/pypy/rlib/rstruct/standardfmttable.py
b/pypy/rlib/rstruct/standardfmttable.py
--- a/pypy/rlib/rstruct/standardfmttable.py
+++ b/pypy/rlib/rstruct/standardfmttable.py
@@ -198,8 +198,8 @@
@specialize.argtype(0)
def unpack_int(fmtiter):
intvalue = inttype(0)
- s = fmtiter.read(size)
- idx = 0
+ s = fmtiter.input
+ idx = fmtiter.get_pos_and_advance(size)
if fmtiter.bigendian:
for i in unroll_range_size:
x = ord(s[idx])
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit