You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
72 lines
2.0 KiB
72 lines
2.0 KiB
5 years ago
|
#-------------------------------------------------------------------------------
|
||
|
# elftools: common/py3compat.py
|
||
|
#
|
||
|
# Python 2/3 compatibility code
|
||
|
#
|
||
|
# Eli Bendersky (eliben@gmail.com)
|
||
|
# This code is in the public domain
|
||
|
#-------------------------------------------------------------------------------
|
||
|
import sys
|
||
|
PY3 = sys.version_info[0] == 3
|
||
|
|
||
|
|
||
|
if PY3:
|
||
|
import io
|
||
|
StringIO = io.StringIO
|
||
|
BytesIO = io.BytesIO
|
||
|
|
||
|
# Functions for acting on bytestrings and strings. In Python 2 and 3,
|
||
|
# strings and bytes are the same and chr/ord can be used to convert between
|
||
|
# numeric byte values and their string pepresentations. In Python 3, bytes
|
||
|
# and strings are different types and bytes hold numeric values when
|
||
|
# iterated over.
|
||
|
|
||
|
def bytes2str(b): return b.decode('latin-1')
|
||
|
def str2bytes(s): return s.encode('latin-1')
|
||
|
def int2byte(i): return bytes((i,))
|
||
|
def byte2int(b): return b
|
||
|
|
||
|
def iterbytes(b):
|
||
|
"""Return an iterator over the elements of a bytes object.
|
||
|
|
||
|
For example, for b'abc' yields b'a', b'b' and then b'c'.
|
||
|
"""
|
||
|
for i in range(len(b)):
|
||
|
yield b[i:i+1]
|
||
|
|
||
|
ifilter = filter
|
||
|
|
||
|
maxint = sys.maxsize
|
||
|
else:
|
||
|
import cStringIO
|
||
|
StringIO = BytesIO = cStringIO.StringIO
|
||
|
|
||
|
def bytes2str(b): return b
|
||
|
def str2bytes(s): return s
|
||
|
int2byte = chr
|
||
|
byte2int = ord
|
||
|
def iterbytes(b):
|
||
|
return iter(b)
|
||
|
|
||
|
from itertools import ifilter
|
||
|
|
||
|
maxint = sys.maxint
|
||
|
|
||
|
|
||
|
def iterkeys(d):
|
||
|
"""Return an iterator over the keys of a dictionary."""
|
||
|
return getattr(d, 'keys' if PY3 else 'iterkeys')()
|
||
|
|
||
|
def itervalues(d):
|
||
|
"""Return an iterator over the values of a dictionary."""
|
||
|
return getattr(d, 'values' if PY3 else 'itervalues')()
|
||
|
|
||
|
def iteritems(d):
|
||
|
"""Return an iterator over the items of a dictionary."""
|
||
|
return getattr(d, 'items' if PY3 else 'iteritems')()
|
||
|
|
||
|
try:
|
||
|
from collections.abc import Mapping # python >= 3.3
|
||
|
except ImportError:
|
||
|
from collections import Mapping # python < 3.3
|