// Lzma2Decoder.h #ifndef __LZMA2_DECODER_H #define __LZMA2_DECODER_H #include "../../../C/Lzma2DecMt.h" #include "../Common/CWrappers.h" namespace NCompress { namespace NLzma2 { class CDecoder: public ICompressCoder, public ICompressSetDecoderProperties2, public ICompressSetFinishMode, public ICompressGetInStreamProcessedSize, public ICompressSetBufSize, #ifndef NO_READ_FROM_CODER public ICompressSetInStream, public ICompressSetOutStreamSize, public ISequentialInStream, #endif #ifndef _7ZIP_ST public ICompressSetCoderMt, public ICompressSetMemLimit, #endif public CMyUnknownImp { CLzma2DecMtHandle _dec; UInt64 _inProcessed; Byte _prop; int _finishMode; UInt32 _inBufSize; UInt32 _outStep; public: MY_QUERYINTERFACE_BEGIN2(ICompressCoder) MY_QUERYINTERFACE_ENTRY(ICompressSetDecoderProperties2) MY_QUERYINTERFACE_ENTRY(ICompressSetFinishMode) MY_QUERYINTERFACE_ENTRY(ICompressGetInStreamProcessedSize) MY_QUERYINTERFACE_ENTRY(ICompressSetBufSize) #ifndef NO_READ_FROM_CODER MY_QUERYINTERFACE_ENTRY(ICompressSetInStream) MY_QUERYINTERFACE_ENTRY(ICompressSetOutStreamSize) MY_QUERYINTERFACE_ENTRY(ISequentialInStream) #endif #ifndef _7ZIP_ST MY_QUERYINTERFACE_ENTRY(ICompressSetCoderMt) MY_QUERYINTERFACE_ENTRY(ICompressSetMemLimit) #endif MY_QUERYINTERFACE_END MY_ADDREF_RELEASE STDMETHOD(Code)(ISequentialInStream *inStream, ISequentialOutStream *outStream, const UInt64 *inSize, const UInt64 *outSize, ICompressProgressInfo *progress); STDMETHOD(SetDecoderProperties2)(const Byte *data, UInt32 size); STDMETHOD(SetFinishMode)(UInt32 finishMode); STDMETHOD(GetInStreamProcessedSize)(UInt64 *value); STDMETHOD(SetInBufSize)(UInt32 streamIndex, UInt32 size); STDMETHOD(SetOutBufSize)(UInt32 streamIndex, UInt32 size); #ifndef _7ZIP_ST private: int _tryMt; UInt32 _numThreads; UInt64 _memUsage; public: STDMETHOD(SetNumberOfThreads)(UInt32 numThreads); STDMETHOD(SetMemLimit)(UInt64 memUsage); #endif #ifndef NO_READ_FROM_CODER private: CMyComPtr _inStream; CSeqInStreamWrap _inWrap; public: STDMETHOD(SetOutStreamSize)(const UInt64 *outSize); STDMETHOD(SetInStream)(ISequentialInStream *inStream); STDMETHOD(ReleaseInStream)(); STDMETHOD(Read)(void *data, UInt32 size, UInt32 *processedSize); #endif CDecoder(); virtual ~CDecoder(); }; }} #endif