NScumm.Sky.RncDecoder.MakeHufftable C# (CSharp) Method

MakeHufftable() private method

private MakeHufftable ( ushort table ) : void
table ushort
return void
        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));
                    }
                }
            }
        }