3 namespace ByteFX.Data.Common
\r
6 /// Summary description for HuffmanTree.
\r
8 public class HuffmanTree
\r
10 const int MAX_BITS = 15;
\r
13 public HuffmanTree(bool lit)
\r
21 private void BuildLitTree()
\r
23 codes = new int[288];
\r
25 // fill the code slots with code lengths first
\r
26 for (int x=0; x < 144; x++)
\r
28 for (int x=144; x < 256; x++)
\r
30 for (int x=256; x < 280; x++)
\r
32 for (int x=280; x < 288; x++)
\r
39 private void BuildLenTree()
\r
44 private void BuildTreeCommon()
\r
46 int[] codecounts = new int[MAX_BITS];
\r
47 int[] codebase = new int[MAX_BITS];
\r
49 for (int i = 0; i < codes.Length; i++)
\r
51 int bit_len = codes[i];
\r
53 codecounts[bit_len]++;
\r
56 // now we compute the intial value for each code length
\r
59 for (int bits = 1; bits <= MAX_BITS; bits++)
\r
61 code = (code + codecounts[bits-1]) << 1;
\r
62 codebase[bits] = code;
\r
65 // next we assign numerical values to each code
\r
66 for (int x=0; x <= codes.Length; x++)
\r
68 if (codes[x] == 0) continue;
\r
69 int blen = codes[x];
\r
70 codes[x] = codebase[ blen ];
\r
71 codebase[ blen ] ++;
\r