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