12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- namespace SharpCompress.Compressors.Rar.UnpackV2017
- {
- internal partial class BitInput
- {
- public const int MAX_SIZE=0x8000; // Size of input buffer.
- public int InAddr; // Curent byte position in the buffer.
- public int InBit; // Current bit position in the current byte.
- public bool ExternalBuffer;
- //BitInput(bool AllocBuffer);
- //~BitInput();
- public byte[] InBuf; // Dynamically allocated input buffer.
- public
- void InitBitInput()
- {
- InAddr=InBit=0;
- }
-
- // Move forward by 'Bits' bits.
- public void addbits(uint _Bits)
- {
- var Bits = checked((int)_Bits);
- Bits+=InBit;
- InAddr+=Bits>>3;
- InBit=Bits&7;
- }
-
- // Return 16 bits from current position in the buffer.
- // Bit at (InAddr,InBit) has the highest position in returning data.
- public uint getbits()
- {
- uint BitField=(uint)InBuf[InAddr] << 16;
- BitField|=(uint)InBuf[InAddr+1] << 8;
- BitField|=(uint)InBuf[InAddr+2];
- BitField >>= (8-InBit);
- return BitField & 0xffff;
- }
- // Return 32 bits from current position in the buffer.
- // Bit at (InAddr,InBit) has the highest position in returning data.
- public uint getbits32()
- {
- uint BitField=(uint)InBuf[InAddr] << 24;
- BitField|=(uint)InBuf[InAddr+1] << 16;
- BitField|=(uint)InBuf[InAddr+2] << 8;
- BitField|=(uint)InBuf[InAddr+3];
- BitField <<= InBit;
- BitField|=(uint)InBuf[InAddr+4] >> (8-InBit);
- return BitField & 0xffffffff;
- }
-
- //void faddbits(uint Bits);
- //uint fgetbits();
-
- // Check if buffer has enough space for IncPtr bytes. Returns 'true'
- // if buffer will be overflown.
- private bool Overflow(uint IncPtr)
- {
- return InAddr+IncPtr>=MAX_SIZE;
- }
- //void SetExternalBuffer(byte *Buf);
- }
- }
|