6 #include "../IStream.h"
\r
7 #include "../../Common/MyCom.h"
\r
8 #include "../../Common/MyException.h"
\r
10 #ifndef _NO_EXCEPTIONS
\r
11 struct CInBufferException: public CSystemException
\r
13 CInBufferException(HRESULT errorCode): CSystemException(errorCode) {}
\r
22 CMyComPtr<ISequentialInStream> _stream;
\r
23 UInt64 _processedSize;
\r
31 #ifdef _NO_EXCEPTIONS
\r
36 ~CInBuffer() { Free(); }
\r
38 bool Create(UInt32 bufferSize);
\r
41 void SetStream(ISequentialInStream *stream);
\r
43 void ReleaseStream() { _stream.Release(); }
\r
45 bool ReadByte(Byte &b)
\r
47 if (_buffer >= _bufferLimit)
\r
55 if (_buffer >= _bufferLimit)
\r
56 return ReadBlock2();
\r
59 UInt32 ReadBytes(Byte *buf, UInt32 size)
\r
61 if ((UInt32)(_bufferLimit - _buffer) >= size)
\r
63 for (UInt32 i = 0; i < size; i++)
\r
64 buf[i] = _buffer[i];
\r
68 for (UInt32 i = 0; i < size; i++)
\r
70 if (_buffer >= _bufferLimit)
\r
73 buf[i] = *_buffer++;
\r
77 UInt64 GetProcessedSize() const { return _processedSize + (_buffer - _bufferBase); }
\r
78 bool WasFinished() const { return _wasFinished; }
\r