private void MakeHufftable(ushort[] table)
{
var offset = 0;
var numCodes = InputBits(5);
if (numCodes == 0)
return;
var huffLength = new byte[16];
for (var i = 0; i < numCodes; i++)
huffLength[i] = (byte)(InputBits(4) & 0x00FF);
ushort huffCode = 0;
for (var bitLength = 1; bitLength < 17; bitLength++)
{
for (var i = 0; i < numCodes; i++)
{
if (huffLength[i] == bitLength)
{
table[offset++] = (ushort)((1 << bitLength) - 1);
var b = (ushort)(huffCode >> (16 - bitLength));
ushort a = 0;
for (var j = 0; j < bitLength; j++)
a |= (ushort)(((b >> j) & 1) << (bitLength - j - 1));
table[offset++] = a;
table[offset + 0x1e] = (ushort)((huffLength[i] << 8) | (i & 0x00FF));
huffCode += (ushort)(1 << (16 - bitLength));
}
}
}
}