12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- #if !Rar2017_64bit
- using nint = System.Int32;
- using nuint = System.UInt32;
- using size_t = System.UInt32;
- #else
- using nint = System.Int64;
- using nuint = System.UInt64;
- using size_t = System.UInt64;
- #endif
- namespace SharpCompress.Compressors.Rar.UnpackV2017
- {
- internal partial class BitInput
- {
- public 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;
- //}
- //
- public
- void faddbits(uint Bits)
- {
- // Function wrapped version of inline addbits to save code size.
- addbits(Bits);
- }
- public
- uint fgetbits()
- {
- // Function wrapped version of inline getbits to save code size.
- return getbits();
- }
- private void SetExternalBuffer(byte []Buf)
- {
- //if (InBuf!=NULL && !ExternalBuffer)
- // delete[] InBuf;
- InBuf=Buf;
- ExternalBuffer=true;
- }
- }
- }
|