[pypy-commit] pypy unpack-ints-fast: try to speed up unpacking ints

justinpeel noreply at buildbot.pypy.org
Sun Aug 28 08:28:51 CEST 2011


Author: Justin Peel <notmuchtotell at gmail.com>
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])


More information about the pypy-commit mailing list