1 // InStreamWithCRC.h 2 3 #ifndef __IN_STREAM_WITH_CRC_H 4 #define __IN_STREAM_WITH_CRC_H 5 6 #include "../../../../C/7zCrc.h" 7 8 #include "../../../Common/MyCom.h" 9 10 #include "../../IStream.h" 11 12 class CSequentialInStreamWithCRC: 13 public ISequentialInStream, 14 public CMyUnknownImp 15 { 16 public: 17 MY_UNKNOWN_IMP 18 19 STDMETHOD(Read)(void *data, UInt32 size, UInt32 *processedSize); 20 private: 21 CMyComPtr<ISequentialInStream> _stream; 22 UInt64 _size; 23 UInt32 _crc; 24 bool _wasFinished; 25 public: SetStream(ISequentialInStream * stream)26 void SetStream(ISequentialInStream *stream) { _stream = stream; } Init()27 void Init() 28 { 29 _size = 0; 30 _wasFinished = false; 31 _crc = CRC_INIT_VAL; 32 } ReleaseStream()33 void ReleaseStream() { _stream.Release(); } GetCRC()34 UInt32 GetCRC() const { return CRC_GET_DIGEST(_crc); } GetSize()35 UInt64 GetSize() const { return _size; } WasFinished()36 bool WasFinished() const { return _wasFinished; } 37 }; 38 39 class CInStreamWithCRC: 40 public IInStream, 41 public CMyUnknownImp 42 { 43 public: 44 MY_UNKNOWN_IMP1(IInStream) 45 46 STDMETHOD(Read)(void *data, UInt32 size, UInt32 *processedSize); 47 STDMETHOD(Seek)(Int64 offset, UInt32 seekOrigin, UInt64 *newPosition); 48 private: 49 CMyComPtr<IInStream> _stream; 50 UInt64 _size; 51 UInt32 _crc; 52 // bool _wasFinished; 53 public: SetStream(IInStream * stream)54 void SetStream(IInStream *stream) { _stream = stream; } Init()55 void Init() 56 { 57 _size = 0; 58 // _wasFinished = false; 59 _crc = CRC_INIT_VAL; 60 } ReleaseStream()61 void ReleaseStream() { _stream.Release(); } GetCRC()62 UInt32 GetCRC() const { return CRC_GET_DIGEST(_crc); } GetSize()63 UInt64 GetSize() const { return _size; } 64 // bool WasFinished() const { return _wasFinished; } 65 }; 66 67 #endif 68