mirror of https://github.com/google/brotli
58 lines
1.4 KiB
Java
58 lines
1.4 KiB
Java
![]() |
/* 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;
|
||
|
}
|
||
|
}
|
||
|
}
|