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>