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: 26 void SetStream(ISequentialInStream *stream) { _stream = stream; } 27 void Init() 28 { 29 _size = 0; 30 _wasFinished = false; 31 _crc = CRC_INIT_VAL; 32 } 33 void ReleaseStream() { _stream.Release(); } 34 UInt32 GetCRC() const { return CRC_GET_DIGEST(_crc); } 35 UInt64 GetSize() const { return _size; } 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: 54 void SetStream(IInStream *stream) { _stream = stream; } 55 void Init() 56 { 57 _size = 0; 58 // _wasFinished = false; 59 _crc = CRC_INIT_VAL; 60 } 61 void ReleaseStream() { _stream.Release(); } 62 UInt32 GetCRC() const { return CRC_GET_DIGEST(_crc); } 63 UInt64 GetSize() const { return _size; } 64 // bool WasFinished() const { return _wasFinished; } 65 }; 66 67 #endif 68