Annotation of elwix/tools/oldlzma/SRC/7zip/Compress/LZ/LZOutWindow.h, revision 1.1

1.1     ! misho       1: // LZOutWindow.h
        !             2: 
        !             3: #ifndef __LZ_OUT_WINDOW_H
        !             4: #define __LZ_OUT_WINDOW_H
        !             5: 
        !             6: #include "../../IStream.h"
        !             7: 
        !             8: #ifndef _NO_EXCEPTIONS
        !             9: class CLZOutWindowException
        !            10: {
        !            11: public:
        !            12:   HRESULT ErrorCode;
        !            13:   CLZOutWindowException(HRESULT errorCode): ErrorCode(errorCode) {}
        !            14: };
        !            15: #endif
        !            16: 
        !            17: class CLZOutWindow
        !            18: {
        !            19:   Byte  *_buffer;
        !            20:   UInt32 _pos;
        !            21:   UInt32 _windowSize;
        !            22:   UInt32 _streamPos;
        !            23:   ISequentialOutStream *_stream;
        !            24:   void FlushWithCheck();
        !            25: public:
        !            26:   #ifdef _NO_EXCEPTIONS
        !            27:   HRESULT ErrorCode;
        !            28:   #endif
        !            29: 
        !            30:   void Free();
        !            31:   CLZOutWindow(): _buffer(0), _stream(0) {}
        !            32:   ~CLZOutWindow() { Free();  /* ReleaseStream(); */ }
        !            33:   bool Create(UInt32 windowSize);
        !            34:   
        !            35:   void SetStream(ISequentialOutStream *stream);
        !            36:   void Init(bool solid = false);
        !            37:   HRESULT Flush();
        !            38:   void ReleaseStream();
        !            39:   
        !            40:   void CopyBlock(UInt32 distance, UInt32 len)
        !            41:   {
        !            42:     UInt32 pos = _pos - distance - 1;
        !            43:     if (pos >= _windowSize)
        !            44:       pos += _windowSize;
        !            45:     for(; len > 0; len--)
        !            46:     {
        !            47:       if (pos >= _windowSize)
        !            48:         pos = 0;
        !            49:       _buffer[_pos++] = _buffer[pos++];
        !            50:       if (_pos >= _windowSize)
        !            51:         FlushWithCheck();  
        !            52:       // PutOneByte(GetOneByte(distance));
        !            53:     }
        !            54:   }
        !            55:   
        !            56:   void PutByte(Byte b)
        !            57:   {
        !            58:     _buffer[_pos++] = b;
        !            59:     if (_pos >= _windowSize)
        !            60:       FlushWithCheck();  
        !            61:   }
        !            62:   
        !            63:   Byte GetByte(UInt32 distance) const
        !            64:   {
        !            65:     UInt32 pos = _pos - distance - 1;
        !            66:     if (pos >= _windowSize)
        !            67:       pos += _windowSize;
        !            68:     return _buffer[pos]; 
        !            69:   }
        !            70: };
        !            71: 
        !            72: #endif

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>