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
19namespace NArchive {
20namespace N7z {
21
22class 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;
39public:
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      ISequentialOutStream *outStream,
49      CRecordVector<UInt64> &packSizes,
50      ICompressProgressInfo *compressProgress);
51};
52
53}}
54
55#endif
56