12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 |
- #include "rar.hpp"
- BitInput::BitInput(bool AllocBuffer)
- {
- ExternalBuffer=false;
- if (AllocBuffer)
- {
- // getbits32 attempts to read data from InAddr, ... InAddr+3 positions.
- // So let's allocate 3 additional bytes for situation, when we need to
- // read only 1 byte from the last position of buffer and avoid a crash
- // from access to next 3 bytes, which contents we do not need.
- size_t BufSize=MAX_SIZE+3;
- InBuf=new byte[BufSize];
- // Ensure that we get predictable results when accessing bytes in area
- // not filled with read data.
- memset(InBuf,0,BufSize);
- }
- else
- InBuf=NULL;
- }
- BitInput::~BitInput()
- {
- if (!ExternalBuffer)
- delete[] InBuf;
- }
- void BitInput::faddbits(uint Bits)
- {
- // Function wrapped version of inline addbits to save code size.
- addbits(Bits);
- }
- uint BitInput::fgetbits()
- {
- // Function wrapped version of inline getbits to save code size.
- return getbits();
- }
- void BitInput::SetExternalBuffer(byte *Buf)
- {
- if (InBuf!=NULL && !ExternalBuffer)
- delete[] InBuf;
- InBuf=Buf;
- ExternalBuffer=true;
- }
|