1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- #ifndef _RAR_GETBITS_
- #define _RAR_GETBITS_
- class BitInput
- {
- public:
- enum BufferSize {MAX_SIZE=0x8000};
- int InAddr;
- int InBit;
- bool ExternalBuffer;
- public:
- BitInput(bool AllocBuffer);
- ~BitInput();
- byte *InBuf;
- void InitBitInput()
- {
- InAddr=InBit=0;
- }
-
-
- void addbits(uint Bits)
- {
- Bits+=InBit;
- InAddr+=Bits>>3;
- InBit=Bits&7;
- }
-
-
-
- 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;
- }
-
-
- 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();
-
-
-
- bool Overflow(uint IncPtr)
- {
- return InAddr+IncPtr>=MAX_SIZE;
- }
- void SetExternalBuffer(byte *Buf);
- };
- #endif
|