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>