// 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
