1 // PpmdDecoder.h 2 3 #ifndef ZIP7_INC_COMPRESS_PPMD_DECODER_H 4 #define ZIP7_INC_COMPRESS_PPMD_DECODER_H 5 6 #include "../../../C/Ppmd7.h" 7 8 #include "../../Common/MyCom.h" 9 10 #include "../ICoder.h" 11 12 #include "../Common/CWrappers.h" 13 14 namespace NCompress { 15 namespace NPpmd { 16 17 class CDecoder Z7_final: 18 public ICompressCoder, 19 public ICompressSetDecoderProperties2, 20 public ICompressSetFinishMode, 21 public ICompressGetInStreamProcessedSize, 22 #ifndef Z7_NO_READ_FROM_CODER 23 public ICompressSetInStream, 24 public ICompressSetOutStreamSize, 25 public ISequentialInStream, 26 #endif 27 public CMyUnknownImp 28 { 29 Z7_COM_QI_BEGIN2(ICompressCoder) 30 Z7_COM_QI_ENTRY(ICompressSetDecoderProperties2) 31 Z7_COM_QI_ENTRY(ICompressSetFinishMode) 32 Z7_COM_QI_ENTRY(ICompressGetInStreamProcessedSize) 33 #ifndef Z7_NO_READ_FROM_CODER 34 Z7_COM_QI_ENTRY(ICompressSetInStream) 35 Z7_COM_QI_ENTRY(ICompressSetOutStreamSize) 36 Z7_COM_QI_ENTRY(ISequentialInStream) 37 #endif 38 Z7_COM_QI_END 39 Z7_COM_ADDREF_RELEASE 40 41 Z7_IFACE_COM7_IMP(ICompressCoder) 42 Z7_IFACE_COM7_IMP(ICompressSetDecoderProperties2) 43 Z7_IFACE_COM7_IMP(ICompressSetFinishMode) 44 Z7_IFACE_COM7_IMP(ICompressGetInStreamProcessedSize) 45 #ifndef Z7_NO_READ_FROM_CODER 46 Z7_IFACE_COM7_IMP(ICompressSetOutStreamSize) 47 Z7_IFACE_COM7_IMP(ICompressSetInStream) 48 Z7_IFACE_COM7_IMP(ISequentialInStream) 49 #else 50 Z7_COM7F_IMF(SetOutStreamSize(const UInt64 *outSize)); 51 #endif 52 53 Byte *_outBuf; 54 CByteInBufWrap _inStream; 55 CPpmd7 _ppmd; 56 57 Byte _order; 58 bool FinishStream; 59 bool _outSizeDefined; 60 HRESULT _res; 61 int _status; 62 UInt64 _outSize; 63 UInt64 _processedSize; 64 65 HRESULT CodeSpec(Byte *memStream, UInt32 size); 66 67 public: 68 69 #ifndef Z7_NO_READ_FROM_CODER 70 CMyComPtr<ISequentialInStream> InSeqStream; 71 #endif 72 CDecoder()73 CDecoder(): 74 _outBuf(NULL), 75 FinishStream(false), 76 _outSizeDefined(false) 77 { 78 Ppmd7_Construct(&_ppmd); 79 _ppmd.rc.dec.Stream = &_inStream.vt; 80 } 81 82 ~CDecoder(); 83 }; 84 85 }} 86 87 #endif 88