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↩