1b50b7ef8f8150616d3e9a227ce2d722a8355b1dLode Vandevenne/*
2b50b7ef8f8150616d3e9a227ce2d722a8355b1dLode VandevenneCopyright 2011 Google Inc. All Rights Reserved.
3b50b7ef8f8150616d3e9a227ce2d722a8355b1dLode Vandevenne
4b50b7ef8f8150616d3e9a227ce2d722a8355b1dLode VandevenneLicensed under the Apache License, Version 2.0 (the "License");
5b50b7ef8f8150616d3e9a227ce2d722a8355b1dLode Vandevenneyou may not use this file except in compliance with the License.
6b50b7ef8f8150616d3e9a227ce2d722a8355b1dLode VandevenneYou may obtain a copy of the License at
7b50b7ef8f8150616d3e9a227ce2d722a8355b1dLode Vandevenne
8b50b7ef8f8150616d3e9a227ce2d722a8355b1dLode Vandevenne    http://www.apache.org/licenses/LICENSE-2.0
9b50b7ef8f8150616d3e9a227ce2d722a8355b1dLode Vandevenne
10b50b7ef8f8150616d3e9a227ce2d722a8355b1dLode VandevenneUnless required by applicable law or agreed to in writing, software
11b50b7ef8f8150616d3e9a227ce2d722a8355b1dLode Vandevennedistributed under the License is distributed on an "AS IS" BASIS,
12b50b7ef8f8150616d3e9a227ce2d722a8355b1dLode VandevenneWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13b50b7ef8f8150616d3e9a227ce2d722a8355b1dLode VandevenneSee the License for the specific language governing permissions and
14b50b7ef8f8150616d3e9a227ce2d722a8355b1dLode Vandevennelimitations under the License.
15b50b7ef8f8150616d3e9a227ce2d722a8355b1dLode Vandevenne
16b50b7ef8f8150616d3e9a227ce2d722a8355b1dLode VandevenneAuthor: lode.vandevenne@gmail.com (Lode Vandevenne)
17b50b7ef8f8150616d3e9a227ce2d722a8355b1dLode VandevenneAuthor: jyrki.alakuijala@gmail.com (Jyrki Alakuijala)
18b50b7ef8f8150616d3e9a227ce2d722a8355b1dLode Vandevenne*/
19b50b7ef8f8150616d3e9a227ce2d722a8355b1dLode Vandevenne
20b50b7ef8f8150616d3e9a227ce2d722a8355b1dLode Vandevenne#ifndef ZOPFLI_KATAJAINEN_H_
21b50b7ef8f8150616d3e9a227ce2d722a8355b1dLode Vandevenne#define ZOPFLI_KATAJAINEN_H_
22b50b7ef8f8150616d3e9a227ce2d722a8355b1dLode Vandevenne
23b50b7ef8f8150616d3e9a227ce2d722a8355b1dLode Vandevenne#include <string.h>
24b50b7ef8f8150616d3e9a227ce2d722a8355b1dLode Vandevenne
25b50b7ef8f8150616d3e9a227ce2d722a8355b1dLode Vandevenne/*
26b50b7ef8f8150616d3e9a227ce2d722a8355b1dLode VandevenneOutputs minimum-redundancy length-limited code bitlengths for symbols with the
27b50b7ef8f8150616d3e9a227ce2d722a8355b1dLode Vandevennegiven counts. The bitlengths are limited by maxbits.
28b50b7ef8f8150616d3e9a227ce2d722a8355b1dLode Vandevenne
29b50b7ef8f8150616d3e9a227ce2d722a8355b1dLode VandevenneThe output is tailored for DEFLATE: symbols that never occur, get a bit length
30b50b7ef8f8150616d3e9a227ce2d722a8355b1dLode Vandevenneof 0, and if only a single symbol occurs at least once, its bitlength will be 1,
31b50b7ef8f8150616d3e9a227ce2d722a8355b1dLode Vandevenneand not 0 as would theoretically be needed for a single symbol.
32b50b7ef8f8150616d3e9a227ce2d722a8355b1dLode Vandevenne
33b50b7ef8f8150616d3e9a227ce2d722a8355b1dLode Vandevennefrequencies: The amount of occurances of each symbol.
34b50b7ef8f8150616d3e9a227ce2d722a8355b1dLode Vandevennen: The amount of symbols.
35b50b7ef8f8150616d3e9a227ce2d722a8355b1dLode Vandevennemaxbits: Maximum bit length, inclusive.
36b50b7ef8f8150616d3e9a227ce2d722a8355b1dLode Vandevennebitlengths: Output, the bitlengths for the symbol prefix codes.
37b50b7ef8f8150616d3e9a227ce2d722a8355b1dLode Vandevennereturn: 0 for OK, non-0 for error.
38b50b7ef8f8150616d3e9a227ce2d722a8355b1dLode Vandevenne*/
39981df0fe897c94382b9b963eb72bc36cbc2e729cLode Vandevenneint ZopfliLengthLimitedCodeLengths(
40b50b7ef8f8150616d3e9a227ce2d722a8355b1dLode Vandevenne    const size_t* frequencies, int n, int maxbits, unsigned* bitlengths);
41b50b7ef8f8150616d3e9a227ce2d722a8355b1dLode Vandevenne
42b50b7ef8f8150616d3e9a227ce2d722a8355b1dLode Vandevenne#endif  /* ZOPFLI_KATAJAINEN_H_ */
43