37eefbdfcd5bb6668c1f9a111d492f5d52a9cc2d
[coreboot.git] / payloads / bayou / util / pbuilder / lzma / C / 7zip / Common / OutBuffer.h
1 // OutBuffer.h\r
2 \r
3 #ifndef __OUTBUFFER_H\r
4 #define __OUTBUFFER_H\r
5 \r
6 #include "../IStream.h"\r
7 #include "../../Common/MyCom.h"\r
8 \r
9 #ifndef _NO_EXCEPTIONS\r
10 struct COutBufferException\r
11 {\r
12   HRESULT ErrorCode;\r
13   COutBufferException(HRESULT errorCode): ErrorCode(errorCode) {}\r
14 };\r
15 #endif\r
16 \r
17 class COutBuffer\r
18 {\r
19 protected:\r
20   Byte *_buffer;\r
21   UInt32 _pos;\r
22   UInt32 _limitPos;\r
23   UInt32 _streamPos;\r
24   UInt32 _bufferSize;\r
25   CMyComPtr<ISequentialOutStream> _stream;\r
26   UInt64 _processedSize;\r
27   Byte  *_buffer2;\r
28   bool _overDict;\r
29 \r
30   HRESULT FlushPart();\r
31   void FlushWithCheck();\r
32 public:\r
33   #ifdef _NO_EXCEPTIONS\r
34   HRESULT ErrorCode;\r
35   #endif\r
36 \r
37   COutBuffer(): _buffer(0), _pos(0), _stream(0), _buffer2(0) {}\r
38   ~COutBuffer() { Free(); }\r
39   \r
40   bool Create(UInt32 bufferSize);\r
41   void Free();\r
42 \r
43   void SetMemStream(Byte *buffer) { _buffer2 = buffer; }\r
44   void SetStream(ISequentialOutStream *stream);\r
45   void Init();\r
46   HRESULT Flush();\r
47   void ReleaseStream() {  _stream.Release(); }\r
48 \r
49   void WriteByte(Byte b)\r
50   {\r
51     _buffer[_pos++] = b;\r
52     if(_pos == _limitPos)\r
53       FlushWithCheck();\r
54   }\r
55   void WriteBytes(const void *data, size_t size)\r
56   {\r
57     for (size_t i = 0; i < size; i++)\r
58       WriteByte(((const Byte *)data)[i]);\r
59   }\r
60 \r
61   UInt64 GetProcessedSize() const;\r
62 };\r
63 \r
64 #endif\r