// ZipAddCommon.h #ifndef __ZIP_ADD_COMMON_H #define __ZIP_ADD_COMMON_H #include "../../ICoder.h" #include "../../IProgress.h" #include "../../Common/CreateCoder.h" #include "../../Common/FilterCoder.h" #include "../../Compress/CopyCoder.h" #include "../../Crypto/ZipCrypto.h" #include "../../Crypto/WzAes.h" #include "ZipCompressionMode.h" namespace NArchive { namespace NZip { struct CCompressingResult { UInt64 UnpackSize; UInt64 PackSize; UInt32 CRC; UInt16 Method; Byte ExtractVersion; bool DescriptorMode; bool LzmaEos; CCompressingResult() { // for GCC: UnpackSize = 0; } }; class CAddCommon MY_UNCOPYABLE { CCompressionMethodMode _options; NCompress::CCopyCoder *_copyCoderSpec; CMyComPtr _copyCoder; CMyComPtr _compressEncoder; Byte _compressExtractVersion; bool _isLzmaEos; CFilterCoder *_cryptoStreamSpec; CMyComPtr _cryptoStream; NCrypto::NZip::CEncoder *_filterSpec; NCrypto::NWzAes::CEncoder *_filterAesSpec; Byte *_buf; HRESULT CalcStreamCRC(ISequentialInStream *inStream, UInt32 &resultCRC); public: // CAddCommon(const CCompressionMethodMode &options); CAddCommon(); void SetOptions(const CCompressionMethodMode &options); ~CAddCommon(); HRESULT Set_Pre_CompressionResult(bool inSeqMode, bool outSeqMode, UInt64 unpackSize, CCompressingResult &opRes) const; HRESULT Compress( DECL_EXTERNAL_CODECS_LOC_VARS ISequentialInStream *inStream, IOutStream *outStream, bool inSeqMode, bool outSeqMode, UInt32 fileTime, UInt64 expectedDataSize, ICompressProgressInfo *progress, CCompressingResult &opRes); }; }} #endif