Annotation of elwix/tools/oldlzma/SRC/7zip/Compress/LZ/LZOutWindow.h, revision 1.1.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>