aboutsummaryrefslogtreecommitdiff
path: root/brotli/dec/huffman.h
diff options
context:
space:
mode:
Diffstat (limited to 'brotli/dec/huffman.h')
-rw-r--r--brotli/dec/huffman.h49
1 files changed, 9 insertions, 40 deletions
diff --git a/brotli/dec/huffman.h b/brotli/dec/huffman.h
index fbd0744..834b316 100644
--- a/brotli/dec/huffman.h
+++ b/brotli/dec/huffman.h
@@ -12,7 +12,7 @@
See the License for the specific language governing permissions and
limitations under the License.
- Utilities for building and looking up Huffman trees.
+ Utilities for building Huffman decoding tables.
*/
#ifndef BROTLI_DEC_HUFFMAN_H_
@@ -25,48 +25,17 @@
extern "C" {
#endif
-/* A node of a Huffman tree. */
typedef struct {
- int symbol_;
- int children_; /* delta offset to both children (contiguous) or 0 if leaf. */
-} HuffmanTreeNode;
+ uint8_t bits; /* number of bits used for this symbol */
+ uint16_t value; /* symbol value or table offset */
+} HuffmanCode;
-/* Huffman Tree. */
-#define HUFF_LUT_BITS 7
-#define HUFF_LUT (1U << HUFF_LUT_BITS)
-typedef struct HuffmanTree HuffmanTree;
-struct HuffmanTree {
- /* Fast lookup for short bit lengths. */
- uint8_t lut_bits_[HUFF_LUT];
- int16_t lut_symbol_[HUFF_LUT];
- int16_t lut_jump_[HUFF_LUT];
- /* Complete tree for lookups. */
- HuffmanTreeNode* root_; /* all the nodes, starting at root. */
- int max_nodes_; /* max number of nodes */
- int num_nodes_; /* number of currently occupied nodes */
-};
-
-/* Returns true if the given node is not a leaf of the Huffman tree. */
-static BROTLI_INLINE int HuffmanTreeNodeIsNotLeaf(
- const HuffmanTreeNode* const node) {
- return node->children_;
-}
-
-/* Go down one level. Most critical function. 'right_child' must be 0 or 1. */
-static BROTLI_INLINE const HuffmanTreeNode* HuffmanTreeNextNode(
- const HuffmanTreeNode* node, int right_child) {
- return node + node->children_ + right_child;
-}
-
-/* Releases the nodes of the Huffman tree. */
-/* Note: It does NOT free 'tree' itself. */
-void BrotliHuffmanTreeRelease(HuffmanTree* const tree);
-
-/* Builds Huffman tree assuming code lengths are implicitly in symbol order. */
+/* Builds Huffman lookup table assuming code lengths are in symbol order. */
/* Returns false in case of error (invalid tree or memory error). */
-int BrotliHuffmanTreeBuildImplicit(HuffmanTree* const tree,
- const uint8_t* const code_lengths,
- int code_lengths_size);
+int BrotliBuildHuffmanTable(HuffmanCode* root_table,
+ int root_bits,
+ const uint8_t* const code_lengths,
+ int code_lengths_size);
#if defined(__cplusplus) || defined(c_plusplus)
} /* extern "C" */