mirror of
https://github.com/python/cpython.git
synced 2025-08-31 14:07:50 +00:00
long(string, base) now takes time linear in len(string) when base is a
power of 2. Enabled the tail end of test_long() in pickletester.py because it no longer takes forever when run from test_pickle.py.
This commit is contained in:
parent
06dd8cf5e4
commit
bf2674be0e
4 changed files with 113 additions and 29 deletions
|
@ -1427,9 +1427,6 @@ def encode_long(x):
|
|||
binary = _binascii.unhexlify(ashex)
|
||||
return binary[::-1]
|
||||
|
||||
# XXX OOPS! This is still quadratic-time. While hex(n) is linear-time
|
||||
# XXX in the # of digits in n, long(s, 16) is still quadratic-time
|
||||
# XXX in len(s).
|
||||
def decode_long(data):
|
||||
r"""Decode a long from a two's complement little-endian binary string.
|
||||
|
||||
|
@ -1453,7 +1450,7 @@ def decode_long(data):
|
|||
if nbytes == 0:
|
||||
return 0L
|
||||
ashex = _binascii.hexlify(data[::-1])
|
||||
n = long(ashex, 16) # quadratic time
|
||||
n = long(ashex, 16) # quadratic time before Python 2.3; linear now
|
||||
if data[-1] >= '\x80':
|
||||
n -= 1L << (nbytes * 8)
|
||||
return n
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue