Beispiel #1
0
 def _write_node(self, node, block_pos):
     """Writes the sequence of bytes representing a ``node`` to :attr:`block` at ``block_pos``"""
     STARTS_CHAIN = 0
     if node.starts_chain:
         STARTS_CHAIN = 1
     MATCHES = 0
     if node.pointer is not None:
         MATCHES = 1
     label = pack_metadata(STARTS_CHAIN, MATCHES, node.num_items)
     self.block[block_pos] = label
     block_pos += 1
     
     if node != self.root:
         in_edge = node.in_edge or 0
         self.block[block_pos] = in_edge
         block_pos += 1
     
     if node.pointer is not None:
         for byte in unpack_bytes(node.pointer, self.pointer_size):
             self.block[block_pos] = byte
             block_pos += 1
     if node.starts_chain:
         for char in node.chain:
             self.block[block_pos] = char
             block_pos += 1
     
     if node.continuation is not None:
         return block_pos, [node.continuation] + sorted(node.children.values(), key=lambda n: -n.in_edge)
     else:
         return block_pos, sorted(node.children.values(), key=lambda n: -n.in_edge)
Beispiel #2
0
 def make_matching_nodes(batch):
     next_id = 1
     for c in batch:
         yield bs(0,1,0)
         yield ord(c)
         for item in unpack_bytes(next_id, dps):
             yield item
         next_id += 1
Beispiel #3
0
def test_unpack_bytes():
    assert util.unpack_bytes(257, 2) == [1, 1]