1import sys 2 3PY3 = sys.version_info[0] == 3 4 5try: 6 from itertools import izip 7 xrange = xrange 8except ImportError: 9 # py3 10 izip = zip 11 xrange = range 12# end handle python version 13 14try: 15 # Python 2 16 buffer = buffer 17 memoryview = buffer 18 # Assume no memory view ... 19 def to_bytes(i): 20 return i 21except NameError: 22 # Python 3 has no `buffer`; only `memoryview` 23 # However, it's faster to just slice the object directly, maybe it keeps a view internally 24 def buffer(obj, offset, size=None): 25 if size is None: 26 # return memoryview(obj)[offset:] 27 return obj[offset:] 28 else: 29 # return memoryview(obj)[offset:offset+size] 30 return obj[offset:offset + size] 31 # end buffer reimplementation 32 # smmap can return memory view objects, which can't be compared as buffers/bytes can ... 33 def to_bytes(i): 34 if isinstance(i, memoryview): 35 return i.tobytes() 36 return i 37 38 memoryview = memoryview 39 40try: 41 MAXSIZE = sys.maxint 42except AttributeError: 43 MAXSIZE = sys.maxsize 44