Annotation of elwix/tools/oldlzma/SRC/7zip/Common/OutBuffer.cpp, revision 1.1

1.1     ! misho       1: // OutByte.cpp
        !             2: 
        !             3: #include "StdAfx.h"
        !             4: 
        !             5: #include "OutBuffer.h"
        !             6: 
        !             7: #include "../../Common/Alloc.h"
        !             8: 
        !             9: bool COutBuffer::Create(UInt32 bufferSize)
        !            10: {
        !            11:   const UInt32 kMinBlockSize = 1;
        !            12:   if (bufferSize < kMinBlockSize)
        !            13:     bufferSize = kMinBlockSize;
        !            14:   if (_buffer != 0 && _bufferSize == bufferSize)
        !            15:     return true;
        !            16:   Free();
        !            17:   _bufferSize = bufferSize;
        !            18:   _buffer = (Byte *)::BigAlloc(bufferSize);
        !            19:   return (_buffer != 0);
        !            20: }
        !            21: 
        !            22: void COutBuffer::Free()
        !            23: {
        !            24:   BigFree(_buffer);
        !            25:   _buffer = 0;
        !            26: }
        !            27: 
        !            28: void COutBuffer::SetStream(ISequentialOutStream *stream)
        !            29: {
        !            30:   _stream = stream;
        !            31: }
        !            32: 
        !            33: void COutBuffer::Init()
        !            34: {
        !            35:   _processedSize = 0;
        !            36:   _pos = 0;
        !            37:   #ifdef _NO_EXCEPTIONS
        !            38:   ErrorCode = S_OK;
        !            39:   #endif
        !            40: }
        !            41: 
        !            42: HRESULT COutBuffer::Flush()
        !            43: {
        !            44:   if (_pos == 0)
        !            45:     return S_OK;
        !            46:   UInt32 processedSize;
        !            47:   HRESULT result = _stream->Write(_buffer, _pos, &processedSize);
        !            48:   if (result != S_OK)
        !            49:     return result;
        !            50:   if (_pos != processedSize)
        !            51:     return E_FAIL;
        !            52:   _processedSize += processedSize;
        !            53:   _pos = 0;
        !            54:   return S_OK;
        !            55: }
        !            56: 
        !            57: void COutBuffer::WriteBlock()
        !            58: {
        !            59:   #ifdef _NO_EXCEPTIONS
        !            60:   if (ErrorCode != S_OK)
        !            61:     return;
        !            62:   #endif
        !            63:   HRESULT result = Flush();
        !            64:   #ifdef _NO_EXCEPTIONS
        !            65:   ErrorCode = result;
        !            66:   #else
        !            67:   if (result != S_OK)
        !            68:     throw COutBufferException(result);
        !            69:   #endif
        !            70: }

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>