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>