1 
2 #ifndef _HUFFMAN_H_
3 #define _HUFFMAN_H_
4 
5 enum {
6   HUFF_OK = 0,
7   HUFF_NEED_BYTE
8 };
9 
10 typedef struct _Huffman Huffman;
11 typedef struct _HuffmanCode HuffmanCode;
12 typedef struct _HuffmanTable HuffmanTable;
13 typedef struct _HuffmanTableEntry HuffmanTableEntry;
14 
15 struct _Huffman {
16   int n_codes;
17   HuffmanCode *codes;
18   HuffmanTable *tables;
19 
20   int state;
21   unsigned int state_bits;
22   int state_n_bits;
23 
24   unsigned char next_byte;
25   int out_value;
26 };
27 
28 struct _HuffmanCode {
29   unsigned int code;
30   unsigned int mask;
31   int n_bits;
32   int value;
33 };
34 
35 struct _HuffmanTableEntry {
36   unsigned int codes[8];
37   int n_codes;
38   struct _HuffmanTable *next_table;
39 };
40 
41 struct _HuffmanTable {
42   int n_bits;
43   unsigned int bits;
44   HuffmanTableEntry entries[256];
45 };
46 
47 
48 Huffman * huffman_new (void);
49 void huffman_add_code (Huffman *huff, unsigned int code, int n_bits, int value);
50 void huffman_decode_ref (Huffman *huff, int *dest, unsigned char *src, int n);
51 
52 #endif
53 
54