1 // 7zEncode.h
2 
3 #ifndef __7Z_ENCODE_H
4 #define __7Z_ENCODE_H
5 
6 // #include "../../Common/StreamObjects.h"
7 
8 #include "7zCompressionMode.h"
9 
10 #include "../Common/CoderMixer2.h"
11 #include "../Common/CoderMixer2MT.h"
12 #ifdef _ST_MODE
13 #include "../Common/CoderMixer2ST.h"
14 #endif
15 #include "7zItem.h"
16 
17 #include "../../Common/CreateCoder.h"
18 
19 namespace NArchive {
20 namespace N7z {
21 
22 class CEncoder
23 {
24   NCoderMixer::CCoderMixer2MT *_mixerCoderSpec;
25   CMyComPtr<ICompressCoder2> _mixerCoder;
26 
27   CObjectVector<CCoderInfo> _codersInfo;
28 
29   CCompressionMethodMode _options;
30   NCoderMixer::CBindInfo _bindInfo;
31   NCoderMixer::CBindInfo _decompressBindInfo;
32   NCoderMixer::CBindReverseConverter *_bindReverseConverter;
33   CRecordVector<CMethodId> _decompressionMethods;
34 
35   HRESULT CreateMixerCoder(DECL_EXTERNAL_CODECS_LOC_VARS
36       const UInt64 *inSizeForReduce);
37 
38   bool _constructed;
39 public:
40   CEncoder(const CCompressionMethodMode &options);
41   ~CEncoder();
42   HRESULT EncoderConstr();
43   HRESULT Encode(
44       DECL_EXTERNAL_CODECS_LOC_VARS
45       ISequentialInStream *inStream,
46       const UInt64 *inStreamSize, const UInt64 *inSizeForReduce,
47       CFolder &folderItem,
48       CRecordVector<UInt64> &coderUnpackSizes,
49       UInt64 &unpackSize,
50       ISequentialOutStream *outStream,
51       CRecordVector<UInt64> &packSizes,
52       ICompressProgressInfo *compressProgress);
53 };
54 
55 }}
56 
57 #endif
58