Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches

◆ CreateTable()

void System.IO.Compression.HuffmanTree.CreateTable ( )
inlineprivate

Definition at line 114 of file HuffmanTree.cs.

115 {
116 uint[] array = CalculateHuffmanCode();
117 short num = (short)_codeLengthArray.Length;
118 for (int i = 0; i < _codeLengthArray.Length; i++)
119 {
120 int num2 = _codeLengthArray[i];
121 if (num2 <= 0)
122 {
123 continue;
124 }
125 int num3 = (int)array[i];
126 if (num2 <= _tableBits)
127 {
128 int num4 = 1 << num2;
129 if (num3 >= num4)
130 {
131 throw new InvalidDataException(System.SR.InvalidHuffmanData);
132 }
133 int num5 = 1 << _tableBits - num2;
134 for (int j = 0; j < num5; j++)
135 {
136 _table[num3] = (short)i;
137 num3 += num4;
138 }
139 continue;
140 }
141 int num6 = num2 - _tableBits;
142 int num7 = 1 << _tableBits;
143 int num8 = num3 & ((1 << _tableBits) - 1);
144 short[] array2 = _table;
145 do
146 {
147 short num9 = array2[num8];
148 if (num9 == 0)
149 {
150 array2[num8] = (short)(-num);
151 num9 = (short)(-num);
152 num++;
153 }
154 if (num9 > 0)
155 {
156 throw new InvalidDataException(System.SR.InvalidHuffmanData);
157 }
158 array2 = (((num3 & num7) != 0) ? _right : _left);
159 num8 = -num9;
160 num7 <<= 1;
161 num6--;
162 }
163 while (num6 != 0);
164 array2[num8] = (short)i;
165 }
166 }
static string InvalidHuffmanData
Definition SR.cs:26
Definition SR.cs:7

References System.IO.Compression.HuffmanTree._codeLengthArray, System.IO.Compression.HuffmanTree._left, System.IO.Compression.HuffmanTree._right, System.IO.Compression.HuffmanTree._table, System.IO.Compression.HuffmanTree._tableBits, System.array, System.IO.Compression.HuffmanTree.CalculateHuffmanCode(), and System.SR.InvalidHuffmanData.

Referenced by System.IO.Compression.HuffmanTree.HuffmanTree().