Exemplo n.º 1
0
        private uint ReadHuffSym(ushort[] table, byte[] lengths, uint nsyms, uint nbits, BitBuffer bitbuf)
        {
            uint i, j;

            bitbuf.EnsureBits(16);
            if ((i = table[bitbuf.PeekBits((byte)nbits)]) >= nsyms)
            {
                j = (uint)(1 << (int)(sizeof(uint) * 8 - nbits));
                do
                {
                    j >>= 1;
                    i <<= 1;
                    i  |= (bitbuf.GetBuffer() & j) != 0 ? (uint)1 : 0;
                    if (j == 0)
                    {
                        return(0);        // TODO throw proper exception
                    }
                } while ((i = table[i]) >= nsyms);
            }

            j = lengths[i];
            bitbuf.RemoveBits((byte)j);

            return(i);
        }
Exemplo n.º 2
0
		private uint ReadHuffSym(ushort[] table, byte[] lengths, uint nsyms, uint nbits, BitBuffer bitbuf)
		{
			uint i, j;
			bitbuf.EnsureBits(16);
			if((i = table[bitbuf.PeekBits((byte)nbits)]) >= nsyms)
			{
				j = (uint)(1 << (int)((sizeof(uint)*8) - nbits));
				do
				{
					j >>= 1; i <<= 1; i |= (bitbuf.GetBuffer() & j) != 0 ? (uint)1 : 0;
					if(j == 0) return 0; // TODO throw proper exception
				} while((i = table[i]) >= nsyms);
			}
			j = lengths[i];
			bitbuf.RemoveBits((byte)j);
			
			return i;
		}