| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- // OutBuffer.h
- #ifndef __OUTBUFFER_H
- #define __OUTBUFFER_H
- #include "../IStream.h"
- #include "../../Common/MyCom.h"
- #include "../../Common/MyException.h"
- #ifndef _NO_EXCEPTIONS
- struct COutBufferException: public CSystemException
- {
- COutBufferException(HRESULT errorCode): CSystemException(errorCode) {}
- };
- #endif
- class COutBuffer
- {
- protected:
- Byte *_buffer;
- UInt32 _pos;
- UInt32 _limitPos;
- UInt32 _streamPos;
- UInt32 _bufferSize;
- CMyComPtr<ISequentialOutStream> _stream;
- UInt64 _processedSize;
- Byte *_buffer2;
- bool _overDict;
- HRESULT FlushPart();
- public:
- #ifdef _NO_EXCEPTIONS
- HRESULT ErrorCode;
- #endif
- COutBuffer(): _buffer(0), _pos(0), _stream(0), _buffer2(0) {}
- ~COutBuffer() { Free(); }
-
- bool Create(UInt32 bufferSize);
- void Free();
- void SetMemStream(Byte *buffer) { _buffer2 = buffer; }
- void SetStream(ISequentialOutStream *stream);
- void Init();
- HRESULT Flush();
- void FlushWithCheck();
- void ReleaseStream() { _stream.Release(); }
- void WriteByte(Byte b)
- {
- _buffer[_pos++] = b;
- if(_pos == _limitPos)
- FlushWithCheck();
- }
- void WriteBytes(const void *data, size_t size)
- {
- for (size_t i = 0; i < size; i++)
- WriteByte(((const Byte *)data)[i]);
- }
- UInt64 GetProcessedSize() const;
- };
- #endif
|