示例#1
0
        public int ReadHuffSym(LzxBuffer buffer)
        {
            int i, j;

            buffer.EnsureBits(16);
            if ((i = table[buffer.PeekBits((byte)tableBits)]) >= maxSymbols)
            {
                j = (int)(1 << (int)((4 * 8) - tableBits));
                do
                {
                    uint zeroShift = (uint)j;
                    zeroShift >>= 1;
                    j           = (int)zeroShift;
                    i         <<= 1;
                    i          |= (buffer.BitBuffer & j) != 0 ? (int)1 : 0;

                    if (j == 0)
                    {
                        throw new Exception();                         // return 0;
                    }
                } while ((i = table[i]) >= maxSymbols);
            }
            j = length[i];
            buffer.RemoveBits((byte)j);

            return(i);
        }