示例#1
0
def decode_sets(bytes):
    """
    Decodes a set of sets encoded using encode_sets (see above). 
    
    >>> b = BitStream(hex='0x00000000000000010503').tobytes(); write_sets(decode_sets(b))
    '{{0,2},{0,1}}'
    
    >>> b = BitStream(hex='0x000000000000000100').tobytes(); write_sets(decode_sets(b))
    '{{}}'
    
    >>> b = BitStream(hex='0x0000000000000001').tobytes(); write_sets(decode_sets(b))
    '{}'
    """
    from bitstring.bitstream import BitStream, pack
    bs = BitStream(bytes=bytes)
    bytesperset, content = bs.readlist('uint:64, bits')
    setOfSets = set()
    for bits in content.cut(bytesperset * 8):
        aSet = set()
        bits.reverse()
        for i, b in enumerate(bits):
            if b is True:
                aSet.add(i)
        setOfSets.add(frozenset(aSet))
    return setOfSets
def decode_sets(bytes):
    """
    Decodes a set of sets encoded using encode_sets (see above). 
    
    >>> b = BitStream(hex='0x00000000000000010503').tobytes(); write_sets(decode_sets(b))
    '{{0,2},{0,1}}'
    
    >>> b = BitStream(hex='0x000000000000000100').tobytes(); write_sets(decode_sets(b))
    '{{}}'
    
    >>> b = BitStream(hex='0x0000000000000001').tobytes(); write_sets(decode_sets(b))
    '{}'
    """
    from bitstring.bitstream import BitStream, pack
    bs = BitStream(bytes=bytes)
    bytesperset, content = bs.readlist('uint:64, bits')
    setOfSets = set()
    for bits in content.cut(bytesperset*8):
        aSet = set()
        bits.reverse()
        for i,b in enumerate(bits):
            if b is True:
                aSet.add(i)
        setOfSets.add(frozenset(aSet))
    return setOfSets