Author: Richard Plangger <planri...@gmail.com> Branch: py3.5 Changeset: r89539:f293437a43a6 Date: 2017-01-13 11:32 +0100 http://bitbucket.org/pypy/pypy/changeset/f293437a43a6/
Log: enhance _array_to_hexstring, it takes now the iteration direction into account diff --git a/pypy/objspace/std/bytearrayobject.py b/pypy/objspace/std/bytearrayobject.py --- a/pypy/objspace/std/bytearrayobject.py +++ b/pypy/objspace/std/bytearrayobject.py @@ -579,17 +579,15 @@ PY_SIZE_T_MAX = intmask(2**(rffi.sizeof(rffi.SIZE_T)*8-1)-1) @specialize.arg(3) # raw access -def _array_to_hexstring(space, buf, len=0, rawaccess=False): - if rawaccess: - length = len - else: - length = buf.getlength() +def _array_to_hexstring(space, buf, start, step, length, rawaccess=False): hexstring = StringBuilder(length*2) if length > PY_SIZE_T_MAX/2: raise OperationError(space.w_MemoryError, space.w_None) - for i in range(length): + stepped = 0 + i = start + while stepped < length: if rawaccess: byte = ord(buf[i]) else: @@ -598,6 +596,8 @@ hexstring.append(HEXDIGITS[c]) c = (byte & 0xf) hexstring.append(HEXDIGITS[c]) + i += step + stepped += 1 return space.wrap(hexstring.build()) diff --git a/pypy/objspace/std/memoryobject.py b/pypy/objspace/std/memoryobject.py --- a/pypy/objspace/std/memoryobject.py +++ b/pypy/objspace/std/memoryobject.py @@ -675,7 +675,13 @@ def descr_hex(self, space): from pypy.objspace.std.bytearrayobject import _array_to_hexstring self._check_released(space) - return _array_to_hexstring(space, self.buf) + if isinstance(self.buf, SubBuffer): + step = self.strides[0] + return _array_to_hexstring(space, self.buf.buffer, + self.buf.offset, step, + self.getlength()) + else: + return _array_to_hexstring(space, self.buf, 0, 1, self.getlength()) def is_byte_format(char): return char == 'b' or char == 'B' or char == 'c' diff --git a/pypy/objspace/std/test/test_memoryobject.py b/pypy/objspace/std/test/test_memoryobject.py --- a/pypy/objspace/std/test/test_memoryobject.py +++ b/pypy/objspace/std/test/test_memoryobject.py @@ -194,10 +194,10 @@ assert memoryview(b"abc").hex() == u'616263' def test_hex_long(self): - x = b'0' * 200000 + x = b'01' * 100000 m1 = memoryview(x) m2 = m1[::-1] - assert m2.hex() == '30' * 200000 + assert m2.hex() == '3130' * 100000 def test_memoryview_cast(self): m1 = memoryview(b'abcdefgh') _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit