1 // ZstdDecoder.h 2 3 #ifndef ZIP7_INC_ZSTD_DECODER_H 4 #define ZIP7_INC_ZSTD_DECODER_H 5 6 #include "../../../C/ZstdDec.h" 7 8 #include "../../Common/MyCom.h" 9 #include "../ICoder.h" 10 11 namespace NCompress { 12 namespace NZstd { 13 14 #ifdef Z7_NO_READ_FROM_CODER 15 #define Z7_NO_READ_FROM_CODER_ZSTD 16 #endif 17 18 #ifndef Z7_NO_READ_FROM_CODER_ZSTD 19 // #define Z7_NO_READ_FROM_CODER_ZSTD 20 #endif 21 22 class CDecoder Z7_final: 23 public ICompressCoder, 24 public ICompressSetDecoderProperties2, 25 public ICompressSetFinishMode, 26 public ICompressGetInStreamProcessedSize, 27 public ICompressReadUnusedFromInBuf, 28 public ICompressSetBufSize, 29 #ifndef Z7_NO_READ_FROM_CODER_ZSTD 30 public ICompressSetInStream, 31 public ICompressSetOutStreamSize, 32 public ISequentialInStream, 33 #endif 34 public CMyUnknownImp 35 { 36 Z7_COM_QI_BEGIN2(ICompressCoder) 37 Z7_COM_QI_ENTRY(ICompressSetDecoderProperties2) 38 Z7_COM_QI_ENTRY(ICompressSetFinishMode) 39 Z7_COM_QI_ENTRY(ICompressGetInStreamProcessedSize) 40 Z7_COM_QI_ENTRY(ICompressReadUnusedFromInBuf) 41 Z7_COM_QI_ENTRY(ICompressSetBufSize) 42 #ifndef Z7_NO_READ_FROM_CODER_ZSTD 43 Z7_COM_QI_ENTRY(ICompressSetInStream) 44 Z7_COM_QI_ENTRY(ICompressSetOutStreamSize) 45 Z7_COM_QI_ENTRY(ISequentialInStream) 46 #endif 47 Z7_COM_QI_END 48 Z7_COM_ADDREF_RELEASE 49 50 Z7_IFACE_COM7_IMP(ICompressCoder) 51 Z7_IFACE_COM7_IMP(ICompressSetDecoderProperties2) 52 Z7_IFACE_COM7_IMP(ICompressSetFinishMode) 53 Z7_IFACE_COM7_IMP(ICompressGetInStreamProcessedSize) 54 Z7_IFACE_COM7_IMP(ICompressReadUnusedFromInBuf) 55 Z7_IFACE_COM7_IMP(ICompressSetBufSize) 56 #ifndef Z7_NO_READ_FROM_CODER_ZSTD 57 Z7_IFACE_COM7_IMP(ICompressSetOutStreamSize) 58 Z7_IFACE_COM7_IMP(ICompressSetInStream) 59 Z7_IFACE_COM7_IMP(ISequentialInStream) 60 #endif 61 62 HRESULT Prepare(const UInt64 *outSize); 63 64 UInt32 _outStepMask; 65 CZstdDecHandle _dec; 66 public: 67 UInt64 _inProcessed; 68 CZstdDecState _state; 69 70 private: 71 UInt32 _inBufSize; 72 UInt32 _inBufSize_Allocated; 73 Byte *_inBuf; 74 size_t _afterDecoding_tempPos; 75 76 #ifndef Z7_NO_READ_FROM_CODER_ZSTD 77 CMyComPtr<ISequentialInStream> _inStream; 78 HRESULT _hres_Read; 79 HRESULT _hres_Decode; 80 UInt64 _writtenSize; 81 bool _readWasFinished; 82 bool _wasFinished; 83 #endif 84 85 public: 86 bool FinishMode; 87 Byte DisableHash; 88 CZstdDecResInfo ResInfo; 89 90 HRESULT GetFinishResult(); 91 92 CDecoder(); 93 ~CDecoder(); 94 }; 95 96 }} 97 98 #endif 99