File: huffman.h

package info (click to toggle)
halibut 1.3-5
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 4,060 kB
  • sloc: ansic: 59,012; perl: 197; lisp: 76; makefile: 50; sh: 1
file content (33 lines) | stat: -rw-r--r-- 1,409 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
/*
 * huffman.h: Huffman tree-building routines common to Deflate and LZX.
 */

/*
 * Take an input array 'freqs' of size 'nsyms' giving each symbol's
 * frequency. Return an output array 'lengths' of the same size giving
 * each symbol's code length. Enforce during construction that no code
 * length is greater than 'limit'.
 *
 * The 'freqs' array may be modified, as a side effect of the limit
 * enforcement.
 */
void build_huffman_tree(int *freqs, unsigned char *lengths,
                        int nsyms, int limit);

/*
 * Given a sequence of Huffman code lengths, compute the actual code
 * values. Each one is returned in codes[i] and occupies the bottom
 * lengths[i] bits of the integer. They are in natural big-endian
 * format, i.e. the initial bit of the code, governing the choice of
 * direction at the root node of the notional decode tree, is in the
 * most significant bit position.
 *
 * Returns the maximum code length found. Can also return -1 to
 * indicate the table was overcommitted (too many or too short codes
 * to exactly cover the possible space), which is a fatal error (the
 * output codes will not form a usable Huffman tree), or -2 to
 * indicate it was undercommitted (too few or too long codes), which
 * is a non-fatal error (the resulting tree would be usable, just
 * inefficient).
 */
int compute_huffman_codes(const unsigned char *lengths, int *codes, int nsyms);