130625ba238fcb360c80a093164347503bbedf7adZoltan Szabadka/* Copyright 2013 Google Inc. All Rights Reserved.
230625ba238fcb360c80a093164347503bbedf7adZoltan Szabadka
330625ba238fcb360c80a093164347503bbedf7adZoltan Szabadka   Licensed under the Apache License, Version 2.0 (the "License");
430625ba238fcb360c80a093164347503bbedf7adZoltan Szabadka   you may not use this file except in compliance with the License.
530625ba238fcb360c80a093164347503bbedf7adZoltan Szabadka   You may obtain a copy of the License at
630625ba238fcb360c80a093164347503bbedf7adZoltan Szabadka
730625ba238fcb360c80a093164347503bbedf7adZoltan Szabadka   http://www.apache.org/licenses/LICENSE-2.0
830625ba238fcb360c80a093164347503bbedf7adZoltan Szabadka
930625ba238fcb360c80a093164347503bbedf7adZoltan Szabadka   Unless required by applicable law or agreed to in writing, software
1030625ba238fcb360c80a093164347503bbedf7adZoltan Szabadka   distributed under the License is distributed on an "AS IS" BASIS,
1130625ba238fcb360c80a093164347503bbedf7adZoltan Szabadka   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1230625ba238fcb360c80a093164347503bbedf7adZoltan Szabadka   See the License for the specific language governing permissions and
1330625ba238fcb360c80a093164347503bbedf7adZoltan Szabadka   limitations under the License.
1430625ba238fcb360c80a093164347503bbedf7adZoltan Szabadka
15cbd5cb55f487eda746b0d6f8b5742b5a8e5c846aZoltan Szabadka   Utilities for building Huffman decoding tables.
1630625ba238fcb360c80a093164347503bbedf7adZoltan Szabadka*/
1704163a87d098f14e890c2a3fd240af7f09099711Zoltan Szabadka
1804163a87d098f14e890c2a3fd240af7f09099711Zoltan Szabadka#ifndef BROTLI_DEC_HUFFMAN_H_
1904163a87d098f14e890c2a3fd240af7f09099711Zoltan Szabadka#define BROTLI_DEC_HUFFMAN_H_
2004163a87d098f14e890c2a3fd240af7f09099711Zoltan Szabadka
2104163a87d098f14e890c2a3fd240af7f09099711Zoltan Szabadka#include <assert.h>
2204163a87d098f14e890c2a3fd240af7f09099711Zoltan Szabadka#include "./types.h"
2304163a87d098f14e890c2a3fd240af7f09099711Zoltan Szabadka
2404163a87d098f14e890c2a3fd240af7f09099711Zoltan Szabadka#if defined(__cplusplus) || defined(c_plusplus)
2504163a87d098f14e890c2a3fd240af7f09099711Zoltan Szabadkaextern "C" {
2604163a87d098f14e890c2a3fd240af7f09099711Zoltan Szabadka#endif
2704163a87d098f14e890c2a3fd240af7f09099711Zoltan Szabadka
2804163a87d098f14e890c2a3fd240af7f09099711Zoltan Szabadkatypedef struct {
29cbd5cb55f487eda746b0d6f8b5742b5a8e5c846aZoltan Szabadka  uint8_t bits;     /* number of bits used for this symbol */
30cbd5cb55f487eda746b0d6f8b5742b5a8e5c846aZoltan Szabadka  uint16_t value;   /* symbol value or table offset */
31cbd5cb55f487eda746b0d6f8b5742b5a8e5c846aZoltan Szabadka} HuffmanCode;
3204163a87d098f14e890c2a3fd240af7f09099711Zoltan Szabadka
33cbd5cb55f487eda746b0d6f8b5742b5a8e5c846aZoltan Szabadka/* Builds Huffman lookup table assuming code lengths are in symbol order. */
3430625ba238fcb360c80a093164347503bbedf7adZoltan Szabadka/* Returns false in case of error (invalid tree or memory error). */
35cbd5cb55f487eda746b0d6f8b5742b5a8e5c846aZoltan Szabadkaint BrotliBuildHuffmanTable(HuffmanCode* root_table,
36cbd5cb55f487eda746b0d6f8b5742b5a8e5c846aZoltan Szabadka                            int root_bits,
37cbd5cb55f487eda746b0d6f8b5742b5a8e5c846aZoltan Szabadka                            const uint8_t* const code_lengths,
38cbd5cb55f487eda746b0d6f8b5742b5a8e5c846aZoltan Szabadka                            int code_lengths_size);
3904163a87d098f14e890c2a3fd240af7f09099711Zoltan Szabadka
4004163a87d098f14e890c2a3fd240af7f09099711Zoltan Szabadka#if defined(__cplusplus) || defined(c_plusplus)
4130625ba238fcb360c80a093164347503bbedf7adZoltan Szabadka}    /* extern "C" */
4204163a87d098f14e890c2a3fd240af7f09099711Zoltan Szabadka#endif
4304163a87d098f14e890c2a3fd240af7f09099711Zoltan Szabadka
4430625ba238fcb360c80a093164347503bbedf7adZoltan Szabadka#endif  /* BROTLI_DEC_HUFFMAN_H_ */
45