Annotation of elwix/tools/oldlzma/SRC/7zip/Common/InBuffer.cpp, revision 1.1
1.1 ! misho 1: // InBuffer.cpp
! 2:
! 3: #include "StdAfx.h"
! 4:
! 5: #include "InBuffer.h"
! 6:
! 7: #include "../../Common/Alloc.h"
! 8:
! 9: CInBuffer::CInBuffer():
! 10: _bufferBase(0),
! 11: _bufferSize(0),
! 12: _buffer(0),
! 13: _bufferLimit(0),
! 14: _stream(0)
! 15: {}
! 16:
! 17: bool CInBuffer::Create(UInt32 bufferSize)
! 18: {
! 19: const UInt32 kMinBlockSize = 1;
! 20: if (bufferSize < kMinBlockSize)
! 21: bufferSize = kMinBlockSize;
! 22: if (_bufferBase != 0 && _bufferSize == bufferSize)
! 23: return true;
! 24: Free();
! 25: _bufferSize = bufferSize;
! 26: _bufferBase = (Byte *)::BigAlloc(bufferSize);
! 27: return (_bufferBase != 0);
! 28: }
! 29:
! 30: void CInBuffer::Free()
! 31: {
! 32: BigFree(_bufferBase);
! 33: _bufferBase = 0;
! 34: }
! 35:
! 36: void CInBuffer::SetStream(ISequentialInStream *stream)
! 37: {
! 38: _stream = stream;
! 39: }
! 40:
! 41: void CInBuffer::Init()
! 42: {
! 43: _processedSize = 0;
! 44: _buffer = _bufferBase;
! 45: _bufferLimit = _buffer;
! 46: _wasFinished = false;
! 47: #ifdef _NO_EXCEPTIONS
! 48: ErrorCode = S_OK;
! 49: #endif
! 50: }
! 51:
! 52: bool CInBuffer::ReadBlock()
! 53: {
! 54: #ifdef _NO_EXCEPTIONS
! 55: if (ErrorCode != S_OK)
! 56: return false;
! 57: #endif
! 58: if (_wasFinished)
! 59: return false;
! 60: _processedSize += (_buffer - _bufferBase);
! 61: UInt32 numProcessedBytes;
! 62: HRESULT result = _stream->ReadPart(_bufferBase, _bufferSize, &numProcessedBytes);
! 63: #ifdef _NO_EXCEPTIONS
! 64: ErrorCode = result;
! 65: #else
! 66: if (result != S_OK)
! 67: throw CInBufferException(result);
! 68: #endif
! 69: _buffer = _bufferBase;
! 70: _bufferLimit = _buffer + numProcessedBytes;
! 71: _wasFinished = (numProcessedBytes == 0);
! 72: return (!_wasFinished);
! 73: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>