| /* Copyright 2015 Google Inc. All Rights Reserved. |
| |
| Distributed under MIT license. |
| See file LICENSE for detail or copy at https://opensource.org/licenses/MIT |
| */ |
| |
| package org.brotli.dec; |
| |
| /** |
| * Contains a collection of huffman trees with the same alphabet size. |
| */ |
| final class HuffmanTreeGroup { |
| |
| /** |
| * The maximal alphabet size in this group. |
| */ |
| private int alphabetSize; |
| |
| /** |
| * Storage for Huffman lookup tables. |
| */ |
| int[] codes; |
| |
| /** |
| * Offsets of distinct lookup tables in {@link #codes} storage. |
| */ |
| int[] trees; |
| |
| /** |
| * Initializes the Huffman tree group. |
| * |
| * @param group POJO to be initialised |
| * @param alphabetSize the maximal alphabet size in this group |
| * @param n number of Huffman codes |
| */ |
| static void init(HuffmanTreeGroup group, int alphabetSize, int n) { |
| group.alphabetSize = alphabetSize; |
| group.codes = new int[n * Huffman.HUFFMAN_MAX_TABLE_SIZE]; |
| group.trees = new int[n]; |
| } |
| |
| /** |
| * Decodes Huffman trees from input stream and constructs lookup tables. |
| * |
| * @param group target POJO |
| * @param br data source |
| */ |
| static void decode(HuffmanTreeGroup group, BitReader br) { |
| int next = 0; |
| int n = group.trees.length; |
| for (int i = 0; i < n; i++) { |
| group.trees[i] = next; |
| Decode.readHuffmanCode(group.alphabetSize, group.codes, next, br); |
| next += Huffman.HUFFMAN_MAX_TABLE_SIZE; |
| } |
| } |
| } |