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); }