// PpmdDecoder.h #ifndef ZIP7_INC_COMPRESS_PPMD_DECODER_H #define ZIP7_INC_COMPRESS_PPMD_DECODER_H #include "../../../C/Ppmd7.h" #include "../../Common/MyCom.h" #include "../ICoder.h" #include "../Common/CWrappers.h" namespace NCompress { namespace NPpmd { class CDecoder Z7_final: public ICompressCoder, public ICompressSetDecoderProperties2, public ICompressSetFinishMode, public ICompressGetInStreamProcessedSize, #ifndef Z7_NO_READ_FROM_CODER public ICompressSetInStream, public ICompressSetOutStreamSize, public ISequentialInStream, #endif public CMyUnknownImp { Z7_COM_QI_BEGIN2(ICompressCoder) Z7_COM_QI_ENTRY(ICompressSetDecoderProperties2) Z7_COM_QI_ENTRY(ICompressSetFinishMode) Z7_COM_QI_ENTRY(ICompressGetInStreamProcessedSize) #ifndef Z7_NO_READ_FROM_CODER Z7_COM_QI_ENTRY(ICompressSetInStream) Z7_COM_QI_ENTRY(ICompressSetOutStreamSize) Z7_COM_QI_ENTRY(ISequentialInStream) #endif Z7_COM_QI_END Z7_COM_ADDREF_RELEASE Z7_IFACE_COM7_IMP(ICompressCoder) Z7_IFACE_COM7_IMP(ICompressSetDecoderProperties2) Z7_IFACE_COM7_IMP(ICompressSetFinishMode) Z7_IFACE_COM7_IMP(ICompressGetInStreamProcessedSize) #ifndef Z7_NO_READ_FROM_CODER Z7_IFACE_COM7_IMP(ICompressSetOutStreamSize) Z7_IFACE_COM7_IMP(ICompressSetInStream) Z7_IFACE_COM7_IMP(ISequentialInStream) #else Z7_COM7F_IMF(SetOutStreamSize(const UInt64 *outSize)); #endif Byte *_outBuf; CByteInBufWrap _inStream; CPpmd7 _ppmd; Byte _order; bool FinishStream; bool _outSizeDefined; HRESULT _res; int _status; UInt64 _outSize; UInt64 _processedSize; HRESULT CodeSpec(Byte *memStream, UInt32 size); public: #ifndef Z7_NO_READ_FROM_CODER CMyComPtr InSeqStream; #endif CDecoder(): _outBuf(NULL), FinishStream(false), _outSizeDefined(false) { Ppmd7_Construct(&_ppmd); _ppmd.rc.dec.Stream = &_inStream.vt; } ~CDecoder(); }; }} #endif