// 7zEncode.h #ifndef ZIP7_INC_7Z_ENCODE_H #define ZIP7_INC_7Z_ENCODE_H #include "7zCompressionMode.h" #include "../Common/CoderMixer2.h" #include "7zItem.h" namespace NArchive { namespace N7z { Z7_CLASS_IMP_COM_1( CMtEncMultiProgress, ICompressProgressInfo ) CMyComPtr _progress; #ifndef Z7_ST NWindows::NSynchronization::CCriticalSection CriticalSection; #endif public: UInt64 OutSize; CMtEncMultiProgress(): OutSize(0) {} void Init(ICompressProgressInfo *progress); void AddOutSize(UInt64 addOutSize) { #ifndef Z7_ST NWindows::NSynchronization::CCriticalSectionLock lock(CriticalSection); #endif OutSize += addOutSize; } }; class CEncoder Z7_final MY_UNCOPYABLE { #ifdef USE_MIXER_ST NCoderMixer2::CMixerST *_mixerST; #endif #ifdef USE_MIXER_MT NCoderMixer2::CMixerMT *_mixerMT; #endif NCoderMixer2::CMixer *_mixer; CMyComPtr _mixerRef; CCompressionMethodMode _options; NCoderMixer2::CBindInfo _bindInfo; CRecordVector _decompressionMethods; CRecordVector SrcIn_to_DestOut; CRecordVector SrcOut_to_DestIn; // CRecordVector DestIn_to_SrcOut; CRecordVector DestOut_to_SrcIn; void InitBindConv(); void SetFolder(CFolder &folder); HRESULT CreateMixerCoder(DECL_EXTERNAL_CODECS_LOC_VARS const UInt64 *inSizeForReduce); bool _constructed; public: CEncoder(const CCompressionMethodMode &options); ~CEncoder(); HRESULT EncoderConstr(); HRESULT Encode1( DECL_EXTERNAL_CODECS_LOC_VARS ISequentialInStream *inStream, // const UInt64 *inStreamSize, const UInt64 *inSizeForReduce, UInt64 expectedDataSize, CFolder &folderItem, // CRecordVector &coderUnpackSizes, // UInt64 &unpackSize, ISequentialOutStream *outStream, CRecordVector &packSizes, ICompressProgressInfo *compressProgress); void Encode_Post( UInt64 unpackSize, CRecordVector &coderUnpackSizes); }; }} #endif