| OLD | NEW |
| (Empty) |
| 1 // InBuffer.cpp | |
| 2 | |
| 3 #include "StdAfx.h" | |
| 4 | |
| 5 #include "InBuffer.h" | |
| 6 | |
| 7 extern "C" | |
| 8 { | |
| 9 #include "../../../C/Alloc.h" | |
| 10 } | |
| 11 | |
| 12 CInBuffer::CInBuffer(): | |
| 13 _buffer(0), | |
| 14 _bufferLimit(0), | |
| 15 _bufferBase(0), | |
| 16 _stream(0), | |
| 17 _bufferSize(0) | |
| 18 {} | |
| 19 | |
| 20 bool CInBuffer::Create(UInt32 bufferSize) | |
| 21 { | |
| 22 const UInt32 kMinBlockSize = 1; | |
| 23 if (bufferSize < kMinBlockSize) | |
| 24 bufferSize = kMinBlockSize; | |
| 25 if (_bufferBase != 0 && _bufferSize == bufferSize) | |
| 26 return true; | |
| 27 Free(); | |
| 28 _bufferSize = bufferSize; | |
| 29 _bufferBase = (Byte *)::MidAlloc(bufferSize); | |
| 30 return (_bufferBase != 0); | |
| 31 } | |
| 32 | |
| 33 void CInBuffer::Free() | |
| 34 { | |
| 35 ::MidFree(_bufferBase); | |
| 36 _bufferBase = 0; | |
| 37 } | |
| 38 | |
| 39 void CInBuffer::SetStream(ISequentialInStream *stream) | |
| 40 { | |
| 41 _stream = stream; | |
| 42 } | |
| 43 | |
| 44 void CInBuffer::Init() | |
| 45 { | |
| 46 _processedSize = 0; | |
| 47 _buffer = _bufferBase; | |
| 48 _bufferLimit = _buffer; | |
| 49 _wasFinished = false; | |
| 50 #ifdef _NO_EXCEPTIONS | |
| 51 ErrorCode = S_OK; | |
| 52 #endif | |
| 53 } | |
| 54 | |
| 55 bool CInBuffer::ReadBlock() | |
| 56 { | |
| 57 #ifdef _NO_EXCEPTIONS | |
| 58 if (ErrorCode != S_OK) | |
| 59 return false; | |
| 60 #endif | |
| 61 if (_wasFinished) | |
| 62 return false; | |
| 63 _processedSize += (_buffer - _bufferBase); | |
| 64 UInt32 numProcessedBytes; | |
| 65 HRESULT result = _stream->Read(_bufferBase, _bufferSize, &numProcessedBytes); | |
| 66 #ifdef _NO_EXCEPTIONS | |
| 67 ErrorCode = result; | |
| 68 #else | |
| 69 if (result != S_OK) | |
| 70 throw CInBufferException(result); | |
| 71 #endif | |
| 72 _buffer = _bufferBase; | |
| 73 _bufferLimit = _buffer + numProcessedBytes; | |
| 74 _wasFinished = (numProcessedBytes == 0); | |
| 75 return (!_wasFinished); | |
| 76 } | |
| 77 | |
| 78 Byte CInBuffer::ReadBlock2() | |
| 79 { | |
| 80 if(!ReadBlock()) | |
| 81 return 0xFF; | |
| 82 return *_buffer++; | |
| 83 } | |
| OLD | NEW |