Mercurial > vba-linux
diff src/win32/7zip/7z/CPP/7zip/Common/InBuffer.h @ 1:f9f4f1b99eed
importing src directory
author | Robert McIntyre <rlm@mit.edu> |
---|---|
date | Sat, 03 Mar 2012 10:31:27 -0600 |
parents | |
children |
line wrap: on
line diff
1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/src/win32/7zip/7z/CPP/7zip/Common/InBuffer.h Sat Mar 03 10:31:27 2012 -0600 1.3 @@ -0,0 +1,81 @@ 1.4 +// InBuffer.h 1.5 + 1.6 +#ifndef __INBUFFER_H 1.7 +#define __INBUFFER_H 1.8 + 1.9 +#include "../IStream.h" 1.10 +#include "../../Common/MyCom.h" 1.11 +#include "../../Common/MyException.h" 1.12 + 1.13 +#ifndef _NO_EXCEPTIONS 1.14 +struct CInBufferException: public CSystemException 1.15 +{ 1.16 + CInBufferException(HRESULT errorCode): CSystemException(errorCode) {} 1.17 +}; 1.18 +#endif 1.19 + 1.20 +class CInBuffer 1.21 +{ 1.22 + Byte *_buffer; 1.23 + Byte *_bufferLimit; 1.24 + Byte *_bufferBase; 1.25 + CMyComPtr<ISequentialInStream> _stream; 1.26 + UInt64 _processedSize; 1.27 + UInt32 _bufferSize; 1.28 + bool _wasFinished; 1.29 + 1.30 + bool ReadBlock(); 1.31 + Byte ReadBlock2(); 1.32 + 1.33 +public: 1.34 + #ifdef _NO_EXCEPTIONS 1.35 + HRESULT ErrorCode; 1.36 + #endif 1.37 + 1.38 + CInBuffer(); 1.39 + ~CInBuffer() { Free(); } 1.40 + 1.41 + bool Create(UInt32 bufferSize); 1.42 + void Free(); 1.43 + 1.44 + void SetStream(ISequentialInStream *stream); 1.45 + void Init(); 1.46 + void ReleaseStream() { _stream.Release(); } 1.47 + 1.48 + bool ReadByte(Byte &b) 1.49 + { 1.50 + if (_buffer >= _bufferLimit) 1.51 + if (!ReadBlock()) 1.52 + return false; 1.53 + b = *_buffer++; 1.54 + return true; 1.55 + } 1.56 + Byte ReadByte() 1.57 + { 1.58 + if (_buffer >= _bufferLimit) 1.59 + return ReadBlock2(); 1.60 + return *_buffer++; 1.61 + } 1.62 + UInt32 ReadBytes(Byte *buf, UInt32 size) 1.63 + { 1.64 + if ((UInt32)(_bufferLimit - _buffer) >= size) 1.65 + { 1.66 + for (UInt32 i = 0; i < size; i++) 1.67 + buf[i] = _buffer[i]; 1.68 + _buffer += size; 1.69 + return size; 1.70 + } 1.71 + for (UInt32 i = 0; i < size; i++) 1.72 + { 1.73 + if (_buffer >= _bufferLimit) 1.74 + if (!ReadBlock()) 1.75 + return i; 1.76 + buf[i] = *_buffer++; 1.77 + } 1.78 + return size; 1.79 + } 1.80 + UInt64 GetProcessedSize() const { return _processedSize + (_buffer - _bufferBase); } 1.81 + bool WasFinished() const { return _wasFinished; } 1.82 +}; 1.83 + 1.84 +#endif