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