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>