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