NScumm.Core.Video.BigHuffmanTree.DecodeTree C# (CSharp) Method

DecodeTree() private method

private DecodeTree ( uint prefix, int length ) : uint
prefix uint
length int
return uint
        private uint DecodeTree(uint prefix, int length)
        {
            uint bit = _bs.GetBit();

            if (bit == 0)
            { // Leaf
                uint lo = _loBytes.GetCode(_bs);
                uint hi = _hiBytes.GetCode(_bs);

                uint v = (hi << 8) | lo;

                _tree[_treeSize] = v;

                if (length <= 8)
                {
                    for (uint i = 0; i < 256; i += (uint)(1 << length))
                    {
                        _prefixtree[prefix | i] = _treeSize;
                        _prefixlength[prefix | i] = (byte)length;
                    }
                }

                for (int i = 0; i < 3; ++i)
                {
                    if (_markers[i] == v)
                    {
                        _last[i] = _treeSize;
                        _tree[_treeSize] = 0;
                    }
                }
                ++_treeSize;

                return 1;
            }

            uint t = _treeSize++;

            if (length == 8)
            {
                _prefixtree[prefix] = t;
                _prefixlength[prefix] = 8;
            }

            uint r1 = DecodeTree(prefix, length + 1);

            _tree[t] = SMK_NODE | r1;

            uint r2 = DecodeTree((uint)(prefix | (1 << length)), length + 1);
            return r1 + r2 + 1;
        }