Annotation of elwix/tools/oldlzma/SRC/7zip/Common/InBuffer.h, revision 1.1

1.1     ! misho       1: // InBuffer.h
        !             2: 
        !             3: #ifndef __INBUFFER_H
        !             4: #define __INBUFFER_H
        !             5: 
        !             6: #include "../IStream.h"
        !             7: #include "../../Common/MyCom.h"
        !             8: 
        !             9: #ifndef _NO_EXCEPTIONS
        !            10: class CInBufferException
        !            11: {
        !            12: public:
        !            13:   HRESULT ErrorCode;
        !            14:   CInBufferException(HRESULT errorCode): ErrorCode(errorCode) {}
        !            15: };
        !            16: #endif
        !            17: 
        !            18: class CInBuffer
        !            19: {
        !            20:   UInt64 _processedSize;
        !            21:   Byte *_bufferBase;
        !            22:   UInt32 _bufferSize;
        !            23:   Byte *_buffer;
        !            24:   Byte *_bufferLimit;
        !            25:   CMyComPtr<ISequentialInStream> _stream;
        !            26:   bool _wasFinished;
        !            27: 
        !            28:   bool ReadBlock();
        !            29: 
        !            30: public:
        !            31:   #ifdef _NO_EXCEPTIONS
        !            32:   HRESULT ErrorCode;
        !            33:   #endif
        !            34: 
        !            35:   CInBuffer();
        !            36:   ~CInBuffer() { Free(); }
        !            37: 
        !            38:   bool Create(UInt32 bufferSize);
        !            39:   void Free();
        !            40:   
        !            41:   void SetStream(ISequentialInStream *stream);
        !            42:   void Init();
        !            43:   void ReleaseStream() { _stream.Release(); }
        !            44: 
        !            45:   bool ReadByte(Byte &b)
        !            46:   {
        !            47:     if(_buffer >= _bufferLimit)
        !            48:       if(!ReadBlock())
        !            49:         return false;
        !            50:     b = *_buffer++;
        !            51:     return true;
        !            52:   }
        !            53:   Byte ReadByte()
        !            54:   {
        !            55:     if(_buffer >= _bufferLimit)
        !            56:       if(!ReadBlock())
        !            57:         return 0xFF;
        !            58:     return *_buffer++;
        !            59:   }
        !            60:   void ReadBytes(void *data, UInt32 size, UInt32 &processedSize)
        !            61:   {
        !            62:     for(processedSize = 0; processedSize < size; processedSize++)
        !            63:       if (!ReadByte(((Byte *)data)[processedSize]))
        !            64:         return;
        !            65:   }
        !            66:   bool ReadBytes(void *data, UInt32 size)
        !            67:   {
        !            68:     UInt32 processedSize;
        !            69:     ReadBytes(data, size, processedSize);
        !            70:     return (processedSize == size);
        !            71:   }
        !            72:   UInt64 GetProcessedSize() const { return _processedSize + (_buffer - _bufferBase); }
        !            73:   bool WasFinished() const { return _wasFinished; }
        !            74: };
        !            75: 
        !            76: #endif

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