Author: Justin Peel <[email protected]>
Branch: unpack-ints-fast
Changeset: r46849:4cb38c130da5
Date: 2011-08-27 23:20 -0600
http://bitbucket.org/pypy/pypy/changeset/4cb38c130da5/
Log: try to speed up unpacking ints
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