Skip to content

Commit

Permalink
Implement deser_dyn_bitset and ser_dyn_bitset in mininode.py
Browse files Browse the repository at this point in the history
  • Loading branch information
codablock committed Apr 4, 2019
1 parent b0850fa commit 0248040
Showing 1 changed file with 28 additions and 0 deletions.
28 changes: 28 additions & 0 deletions qa/rpc-tests/test_framework/mininode.py
Original file line number Diff line number Diff line change
Expand Up @@ -201,6 +201,34 @@ def ser_int_vector(l):
r += struct.pack("<i", i)
return r


def deser_dyn_bitset(f, bytes_based):
if bytes_based:
nb = deser_compact_size(f)
n = nb * 8
else:
n = deser_compact_size(f)
nb = int((n + 7) / 8)
b = f.read(nb)
r = []
for i in range(n):
r.append((b[int(i / 8)] & (1 << (i % 8))) != 0)
return r


def ser_dyn_bitset(l, bytes_based):
n = len(l)
nb = int((n + 7) / 8)
r = [0] * nb
for i in range(n):
r[int(i / 8)] |= (1 if l[i] else 0) << (i % 8)
if bytes_based:
r = ser_compact_size(nb) + bytes(r)
else:
r = ser_compact_size(n) + bytes(r)
return r


# Deserialize from a hex string representation (eg from RPC)
def FromHex(obj, hex_string):
obj.deserialize(BytesIO(hex_str_to_bytes(hex_string)))
Expand Down

0 comments on commit 0248040

Please sign in to comment.