#ifndef _HUFFMAN_H_
#define _HUFFMAN_H_
enum {
HUFF_OK = 0,
HUFF_NEED_BYTE
};
typedef struct _Huffman Huffman;
typedef struct _HuffmanCode HuffmanCode;
typedef struct _HuffmanTable HuffmanTable;
typedef struct _HuffmanTableEntry HuffmanTableEntry;
struct _Huffman {
int n_codes;
HuffmanCode *codes;
HuffmanTable *tables;
int state;
unsigned int state_bits;
int state_n_bits;
unsigned char next_byte;
int out_value;
};
struct _HuffmanCode {
unsigned int code;
unsigned int mask;
int n_bits;
int value;
};
struct _HuffmanTableEntry {
unsigned int codes[8];
int n_codes;
struct _HuffmanTable *next_table;
};
struct _HuffmanTable {
int n_bits;
unsigned int bits;
HuffmanTableEntry entries[256];
};
Huffman * huffman_new (void);
void huffman_add_code (Huffman *huff, unsigned int code, int n_bits, int value);
void huffman_decode_ref (Huffman *huff, int *dest, unsigned char *src, int n);
#endif
syntax highlighted by Code2HTML, v. 0.9.1