Source code

Revision control

Copy as Markdown

Other Tools

// OutBuffer.h↩
#ifndef __OUT_BUFFER_H↩
#define __OUT_BUFFER_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 *_buf;↩
UInt32 _pos;↩
UInt32 _limitPos;↩
UInt32 _streamPos;↩
UInt32 _bufSize;↩
ISequentialOutStream *_stream;↩
UInt64 _processedSize;↩
Byte *_buf2;↩
bool _overDict;↩
HRESULT FlushPart() throw();↩
public:↩
#ifdef _NO_EXCEPTIONS↩
HRESULT ErrorCode;↩
#endif
COutBuffer(): _buf(0), _pos(0), _stream(0), _buf2(0) {}↩
~COutBuffer() { Free(); }↩
bool Create(UInt32 bufSize) throw();↩
void Free() throw();↩
void SetMemStream(Byte *buf) { _buf2 = buf; }↩
void SetStream(ISequentialOutStream *stream) { _stream = stream; }↩
void Init() throw();↩
HRESULT Flush() throw();↩
void FlushWithCheck();↩
void WriteByte(Byte b)↩
{↩
UInt32 pos = _pos;↩
_buf[pos] = b;↩
pos++;↩
_pos = pos;↩
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 throw();↩
};↩
#endif