Upload 2.0.2
[physicsfs] / lzma / CPP / 7zip / Archive / 7z / 7zDecode.h
1 // 7zDecode.h
2
3 #ifndef __7Z_DECODE_H
4 #define __7Z_DECODE_H
5
6 #include "../../IStream.h"
7 #include "../../IPassword.h"
8
9 #include "../Common/CoderMixer2.h"
10 #include "../Common/CoderMixer2MT.h"
11 #ifdef _ST_MODE
12 #include "../Common/CoderMixer2ST.h"
13 #endif
14
15 #include "../../Common/CreateCoder.h"
16
17 #include "7zItem.h"
18
19 namespace NArchive {
20 namespace N7z {
21
22 struct CBindInfoEx: public NCoderMixer::CBindInfo
23 {
24   CRecordVector<CMethodId> CoderMethodIDs;
25   void Clear()
26   {
27     CBindInfo::Clear();
28     CoderMethodIDs.Clear();
29   }
30 };
31
32 class CDecoder
33 {
34   bool _bindInfoExPrevIsDefined;
35   CBindInfoEx _bindInfoExPrev;
36   
37   bool _multiThread;
38   #ifdef _ST_MODE
39   NCoderMixer::CCoderMixer2ST *_mixerCoderSTSpec;
40   #endif
41   NCoderMixer::CCoderMixer2MT *_mixerCoderMTSpec;
42   NCoderMixer::CCoderMixer2 *_mixerCoderCommon;
43   
44   CMyComPtr<ICompressCoder2> _mixerCoder;
45   CObjectVector<CMyComPtr<IUnknown> > _decoders;
46   // CObjectVector<CMyComPtr<ICompressCoder2> > _decoders2;
47 public:
48   CDecoder(bool multiThread);
49   HRESULT Decode(
50       DECL_EXTERNAL_CODECS_LOC_VARS
51       IInStream *inStream,
52       UInt64 startPos,
53       const UInt64 *packSizes,
54       const CFolder &folder, 
55       ISequentialOutStream *outStream,
56       ICompressProgressInfo *compressProgress
57       #ifndef _NO_CRYPTO
58       , ICryptoGetTextPassword *getTextPasswordSpec
59       #endif
60       #ifdef COMPRESS_MT
61       , bool mtMode, UInt32 numThreads
62       #endif
63       );
64 };
65
66 }}
67
68 #endif