diff options
Diffstat (limited to 'src/engine/e_huffman.h')
| -rw-r--r-- | src/engine/e_huffman.h | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/src/engine/e_huffman.h b/src/engine/e_huffman.h new file mode 100644 index 00000000..84c71e60 --- /dev/null +++ b/src/engine/e_huffman.h @@ -0,0 +1,43 @@ + +enum +{ + MAX_SYMBOL_SIZE=8, + MAX_NODES=1024*8 +}; + +typedef struct +{ + int i; +} HUFFSYMBOL; + +typedef struct HUFFNODE_t +{ + int frequency; + + int symbol_size; + unsigned char symbol[MAX_SYMBOL_SIZE]; + + int num_bits; + unsigned bits; + + struct HUFFNODE_t *parent; + struct HUFFNODE_t *zero; + struct HUFFNODE_t *one; +} HUFFNODE; + +typedef struct +{ + HUFFNODE nodes[MAX_NODES]; + HUFFNODE *start_node; + int num_symbols; + int num_nodes; +} HUFFSTATE; + + +void huffman_add_symbol(HUFFSTATE *huff, int frequency, int size, unsigned char *symbol); +void huffman_init(HUFFSTATE *huff); +void huffman_construct_tree(HUFFSTATE *huff); +int huffman_compress(HUFFSTATE *huff, const void *input, int input_size, void *output, int output_size); +int huffman_decompress(HUFFSTATE *huff, const void *input, int input_size, void *output, int output_size); + +int huffman_test(); |