Edit

kc3-lang/brotli/java/dec/HuffmanTreeGroup.java

Branch :

  • Show log

    Commit

  • Author : Eugene Kliuchnikov
    Date : 2016-10-17 14:04:59
    Hash : 5025365d
    Message : Add Java port of Brotli decoder.

  • java/dec/HuffmanTreeGroup.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;
        }
      }
    }