Initial import of XMLTree
[SXSI/XMLTree.git] / libcds / src / coders / huffman_codes.cpp
1
2 #include <huffman_codes.h>
3
4 huffman_codes::huffman_codes(uint * symb, uint n) {
5   uint max_v = 0;
6   for(uint i=0;i<n;i++)
7     max_v = max(max_v,symb[i]);
8   uint * occ = new uint[max_v+1];
9   for(uint i=0;i<max_v+1;i++)
10     occ[i] = 0;
11   for(uint i=0;i<n;i++)
12     occ[symb[i]]++;
13   huff_table = createHuff(occ, max_v);
14   delete [] occ;
15 }
16
17 huffman_codes::huffman_codes() {
18 }
19
20 huffman_codes::~huffman_codes() {
21   freeHuff(huff_table);
22 }
23
24 uint huffman_codes::max_length() {
25   return huff_table.depth;
26 }
27
28 uint huffman_codes::size() {
29   return sizeof(huffman_codes)+sizeHuff(huff_table);
30 }
31
32 ulong huffman_codes::encode(uint symb, uint * stream, ulong pos) {
33   return encodeHuff(huff_table, symb, stream, pos);
34 }
35
36 ulong huffman_codes::decode(uint * symb, uint * stream, ulong pos) {
37   return decodeHuff(huff_table, symb, stream, pos);
38 }
39
40 uint huffman_codes::save(FILE *fp) {
41   saveHuff(huff_table,fp);
42   return 0;
43 }
44
45 huffman_codes * huffman_codes::load(FILE * fp) {
46   huffman_codes * ret = new huffman_codes();
47   ret->huff_table = loadHuff(fp,1);
48   return ret;
49 }
50
51