void huffman_build_lookup_table(struct huffman_decoder* decoder) { /* iterate over all codes */ int curcode; for (curcode = 0; curcode < decoder->numcodes; curcode++) { /* process all nodes which have non-zero bits */ struct node_t* node = &decoder->huffnode[curcode]; if (node->numbits > 0) { int shift; lookup_value *dest; lookup_value *destend; /* set up the entry */ lookup_value value = MAKE_LOOKUP(curcode, node->numbits); /* fill all matching entries */ shift = decoder->maxbits - node->numbits; dest = &decoder->lookup[node->bits << shift]; destend = &decoder->lookup[((node->bits + 1) << shift) - 1]; while (dest <= destend) *dest++ = value; } } }
void huffman_context_base::build_lookup_table() { // iterate over all codes for (int curcode = 0; curcode < m_numcodes; curcode++) { // process all nodes which have non-zero bits node_t &node = m_huffnode[curcode]; if (node.m_numbits > 0) { // set up the entry lookup_value value = MAKE_LOOKUP(curcode, node.m_numbits); // fill all matching entries int shift = m_maxbits - node.m_numbits; lookup_value *dest = &m_lookup[node.m_bits << shift]; lookup_value *destend = &m_lookup[((node.m_bits + 1) << shift) - 1]; while (dest <= destend) *dest++ = value; } } }