1// 7zDecode.h
2
3#ifndef __7Z_DECODE_H
4#define __7Z_DECODE_H
5
6#include "../Common/CoderMixer2.h"
7
8#include "7zIn.h"
9
10namespace NArchive {
11namespace N7z {
12
13struct CBindInfoEx: public NCoderMixer2::CBindInfo
14{
15  CRecordVector<CMethodId> CoderMethodIDs;
16
17  void Clear()
18  {
19    CBindInfo::Clear();
20    CoderMethodIDs.Clear();
21  }
22};
23
24class CDecoder
25{
26  bool _bindInfoPrev_Defined;
27  CBindInfoEx _bindInfoPrev;
28
29  bool _useMixerMT;
30
31  #ifdef USE_MIXER_ST
32    NCoderMixer2::CMixerST *_mixerST;
33  #endif
34
35  #ifdef USE_MIXER_MT
36    NCoderMixer2::CMixerMT *_mixerMT;
37  #endif
38
39  NCoderMixer2::CMixer *_mixer;
40  CMyComPtr<IUnknown> _mixerRef;
41
42public:
43
44  CDecoder(bool useMixerMT);
45
46  HRESULT Decode(
47      DECL_EXTERNAL_CODECS_LOC_VARS
48      IInStream *inStream,
49      UInt64 startPos,
50      const CFolders &folders, unsigned folderIndex,
51      const UInt64 *unpackSize // if (!unpackSize), then full folder is required
52                               // if (unpackSize), then only *unpackSize bytes from folder are required
53
54      , ISequentialOutStream *outStream
55      , ICompressProgressInfo *compressProgress
56      , ISequentialInStream **inStreamMainRes
57
58      _7Z_DECODER_CRYPRO_VARS_DECL
59
60      #if !defined(_7ZIP_ST) && !defined(_SFX)
61      , bool mtMode, UInt32 numThreads
62      #endif
63      );
64};
65
66}}
67
68#endif
69