Home | History | Annotate | Download | only in Common
      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