iTextSharp.text.pdf.codec.TIFFFaxDecompressor.NextLesserThan8Bits C# (CSharp) Method

NextLesserThan8Bits() private method

private NextLesserThan8Bits ( int bitsToGet ) : int
bitsToGet int
return int
        private int NextLesserThan8Bits(int bitsToGet)
        {
            byte b, next;
            int l = data.Length - 1;
            int bp = this.bytePointer;

            if (fillOrder == 1) {
                b = data[bp];
                if (bp == l) {
                    next = 0x00;
                } else {
                    next = data[bp + 1];
                }
            } else if (fillOrder == 2) {
                b = flipTable[data[bp] & 0xff];
                if (bp == l) {
                    next = 0x00;
                } else {
                    next = flipTable[data[bp + 1] & 0xff];
                }
            } else {
                throw new Exception("Invalid FillOrder");
            }

            int bitsLeft = 8 - bitPointer;
            int bitsFromNextByte = bitsToGet - bitsLeft;

            int shift = bitsLeft - bitsToGet;
            int i1, i2;
            if (shift >= 0) {
                i1 = (b & table1[bitsLeft]) >> shift;
                bitPointer += bitsToGet;
                if (bitPointer == 8) {
                    bitPointer = 0;
                    bytePointer++;
                }
            } else {
                i1 = (b & table1[bitsLeft]) << (-shift);
                i2 = (next & table2[bitsFromNextByte]) >> (8 - bitsFromNextByte);

                i1 |= i2;
                bytePointer++;
                bitPointer = bitsFromNextByte;
            }

            return i1;
        }