Annotation of elwix/tools/oldlzma/SRC/7zip/Common/InBuffer.cpp, revision 1.1.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>