public void WriteTree(DeflaterHuffman.Tree blTree) { int num = -1; int i = 0; while (i < this.numCodes) { int num2 = 1; int num3 = (int)this.length[i]; int num4; int num5; if (num3 == 0) { num4 = 138; num5 = 3; } else { num4 = 6; num5 = 3; if (num != num3) { blTree.WriteSymbol(num3); num2 = 0; } } num = num3; i++; while (i < this.numCodes && num == (int)this.length[i]) { i++; if (++num2 >= num4) { break; } } if (num2 < num5) { while (num2-- > 0) { blTree.WriteSymbol(num); } } else if (num != 0) { blTree.WriteSymbol(16); this.dh.pending.WriteBits(num2 - 3, 2); } else if (num2 <= 10) { blTree.WriteSymbol(17); this.dh.pending.WriteBits(num2 - 3, 3); } else { blTree.WriteSymbol(18); this.dh.pending.WriteBits(num2 - 11, 7); } } }
public void WriteTree(DeflaterHuffman.Tree blTree) { int code = -1; int index = 0; while (index < this.numCodes) { int num; int num2; int num3 = 1; int num6 = this.length[index]; if (num6 == 0) { num = 0x8a; num2 = 3; } else { num = 6; num2 = 3; if (code != num6) { blTree.WriteSymbol(num6); num3 = 0; } } code = num6; index++; while ((index < this.numCodes) && (code == this.length[index])) { index++; if (++num3 >= num) { break; } } if (num3 < num2) { while (num3-- > 0) { blTree.WriteSymbol(code); } } else if (code != 0) { blTree.WriteSymbol(0x10); this.dh.pending.WriteBits(num3 - 3, 2); } else if (num3 <= 10) { blTree.WriteSymbol(0x11); this.dh.pending.WriteBits(num3 - 3, 3); } else { blTree.WriteSymbol(0x12); this.dh.pending.WriteBits(num3 - 11, 7); } } }