Annotation of elwix/tools/oldlzma/SRC/7zip/Common/OutBuffer.h, revision 1.1.1.1
1.1 misho 1: // OutBuffer.h
2:
3: #ifndef __OUTBUFFER_H
4: #define __OUTBUFFER_H
5:
6: #include "../IStream.h"
7: #include "../../Common/MyCom.h"
8:
9: #ifndef _NO_EXCEPTIONS
10: struct COutBufferException
11: {
12: HRESULT ErrorCode;
13: COutBufferException(HRESULT errorCode): ErrorCode(errorCode) {}
14: };
15: #endif
16:
17: class COutBuffer
18: {
19: Byte *_buffer;
20: UInt32 _pos;
21: UInt32 _bufferSize;
22: CMyComPtr<ISequentialOutStream> _stream;
23: UInt64 _processedSize;
24:
25: void WriteBlock();
26: public:
27: #ifdef _NO_EXCEPTIONS
28: HRESULT ErrorCode;
29: #endif
30:
31: COutBuffer(): _buffer(0), _pos(0), _stream(0) {}
32: ~COutBuffer() { Free(); }
33:
34: bool Create(UInt32 bufferSize);
35: void Free();
36:
37: void SetStream(ISequentialOutStream *stream);
38: void Init();
39: HRESULT Flush();
40: void ReleaseStream() { _stream.Release(); }
41:
42: /*
43: void *GetBuffer(UInt32 &sizeAvail)
44: {
45: sizeAvail = _bufferSize - _pos;
46: return _buffer + _pos;
47: }
48: void MovePos(UInt32 num)
49: {
50: _pos += num;
51: if(_pos >= _bufferSize)
52: WriteBlock();
53: }
54: */
55:
56: void WriteByte(Byte b)
57: {
58: _buffer[_pos++] = b;
59: if(_pos >= _bufferSize)
60: WriteBlock();
61: }
62: void WriteBytes(const void *data, UInt32 size)
63: {
64: for (UInt32 i = 0; i < size; i++)
65: WriteByte(((const Byte *)data)[i]);
66: }
67:
68: UInt64 GetProcessedSize() const { return _processedSize + _pos; }
69: };
70:
71: #endif
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>