// 7zDecode.h | |
#ifndef __7Z_DECODE_H | |
#define __7Z_DECODE_H | |
#include "../../IStream.h" | |
#include "../../IPassword.h" | |
#include "../Common/CoderMixer2.h" | |
#include "../Common/CoderMixer2MT.h" | |
#ifdef _ST_MODE | |
#include "../Common/CoderMixer2ST.h" | |
#endif | |
#include "../../Common/CreateCoder.h" | |
#include "7zIn.h" | |
namespace NArchive { | |
namespace N7z { | |
struct CBindInfoEx: public NCoderMixer::CBindInfo | |
{ | |
CRecordVector<CMethodId> CoderMethodIDs; | |
void Clear() | |
{ | |
CBindInfo::Clear(); | |
CoderMethodIDs.Clear(); | |
} | |
}; | |
class CDecoder | |
{ | |
bool _bindInfoExPrevIsDefined; | |
CBindInfoEx _bindInfoExPrev; | |
bool _multiThread; | |
#ifdef _ST_MODE | |
NCoderMixer::CCoderMixer2ST *_mixerCoderSTSpec; | |
#endif | |
NCoderMixer::CCoderMixer2MT *_mixerCoderMTSpec; | |
NCoderMixer::CCoderMixer2 *_mixerCoderCommon; | |
CMyComPtr<ICompressCoder2> _mixerCoder; | |
CObjectVector<CMyComPtr<IUnknown> > _decoders; | |
// CObjectVector<CMyComPtr<ICompressCoder2> > _decoders2; | |
public: | |
CDecoder(bool multiThread); | |
HRESULT Decode( | |
DECL_EXTERNAL_CODECS_LOC_VARS | |
IInStream *inStream, | |
UInt64 startPos, | |
const CFolders &folders, int folderIndex, | |
ISequentialOutStream *outStream, | |
ICompressProgressInfo *compressProgress | |
_7Z_DECODER_CRYPRO_VARS_DECL | |
#if !defined(_7ZIP_ST) && !defined(_SFX) | |
, bool mtMode, UInt32 numThreads | |
#endif | |
); | |
}; | |
}} | |
#endif |