9 #include "../../../C/Alloc.h"
12 CInBuffer::CInBuffer():
20 bool CInBuffer::Create(UInt32 bufferSize)
22 const UInt32 kMinBlockSize = 1;
23 if (bufferSize < kMinBlockSize)
24 bufferSize = kMinBlockSize;
25 if (_bufferBase != 0 && _bufferSize == bufferSize)
28 _bufferSize = bufferSize;
29 _bufferBase = (Byte *)::MidAlloc(bufferSize);
30 return (_bufferBase != 0);
33 void CInBuffer::Free()
35 ::MidFree(_bufferBase);
39 void CInBuffer::SetStream(ISequentialInStream *stream)
44 void CInBuffer::Init()
47 _buffer = _bufferBase;
48 _bufferLimit = _buffer;
55 bool CInBuffer::ReadBlock()
58 if (ErrorCode != S_OK)
63 _processedSize += (_buffer - _bufferBase);
64 UInt32 numProcessedBytes;
65 HRESULT result = _stream->Read(_bufferBase, _bufferSize, &numProcessedBytes);
70 throw CInBufferException(result);
72 _buffer = _bufferBase;
73 _bufferLimit = _buffer + numProcessedBytes;
74 _wasFinished = (numProcessedBytes == 0);
75 return (!_wasFinished);
78 Byte CInBuffer::ReadBlock2()