| 135 | symbols: number[]; |
| 136 | } |
| 137 | function buildHuff(lengths: number[], n: number): Huff { |
| 138 | const counts = new Array(16).fill(0); |
| 139 | for (let i = 0; i < n; i++) counts[lengths[i]]++; |
| 140 | counts[0] = 0; |
| 141 | const offsets = new Array(16).fill(0); |
| 142 | for (let i = 1; i < 16; i++) offsets[i] = offsets[i - 1] + counts[i - 1]; |
| 143 | const symbols = new Array(n).fill(0); |
| 144 | for (let i = 0; i < n; i++) if (lengths[i]) symbols[offsets[lengths[i]]++] = i; |
| 145 | return { counts, symbols }; |
| 146 | } |
| 147 | function decodeSym(br: BitReader, h: Huff): number { |
| 148 | let code = 0, |
| 149 | first = 0, |