uint16 SmallHuffmanTree::getCode(BitStream &bs) { byte peek = bs.peek8(); uint16 *p = &_tree[_prefixtree[peek]]; bs.skip(_prefixlength[peek]); while (*p & SMK_NODE) { if (bs.getBit()) p += *p & ~SMK_NODE; p++; } return *p; }
uint32 BigHuffmanTree::getCode(BitStream &bs) { byte peek = bs.peek8(); uint32 *p = &_tree[_prefixtree[peek]]; bs.skip(_prefixlength[peek]); while (*p & SMK_NODE) { if (bs.getBit()) p += (*p) & ~SMK_NODE; p++; } uint32 v = *p; if (v != _tree[_last[0]]) { _tree[_last[2]] = _tree[_last[1]]; _tree[_last[1]] = _tree[_last[0]]; _tree[_last[0]] = v; } return v; }