Author: Justin Peel <notmuchtot...@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]) _______________________________________________ pypy-commit mailing list pypy-commit@python.org http://mail.python.org/mailman/listinfo/pypy-commit