// HandlerOut.h #ifndef ZIP7_INC_HANDLER_OUT_H #define ZIP7_INC_HANDLER_OUT_H #include "../../../Windows/System.h" #include "../../Common/MethodProps.h" namespace NArchive { bool ParseSizeString(const wchar_t *name, const PROPVARIANT &prop, UInt64 percentsBase, UInt64 &res); class CCommonMethodProps { protected: void InitCommon() { // _Write_MTime = true; #ifndef Z7_ST _numProcessors = _numThreads = NWindows::NSystem::GetNumberOfProcessors(); _numThreads_WasForced = false; #endif UInt64 memAvail = (UInt64)(sizeof(size_t)) << 28; _memAvail = memAvail; _memUsage_Compress = memAvail; _memUsage_Decompress = memAvail; _memUsage_WasSet = NWindows::NSystem::GetRamSize(memAvail); if (_memUsage_WasSet) { _memAvail = memAvail; unsigned bits = sizeof(size_t) * 8; if (bits == 32) { const UInt32 limit2 = (UInt32)7 << 28; if (memAvail > limit2) memAvail = limit2; } // 80% - is auto usage limit in handlers // _memUsage_Compress = memAvail * 4 / 5; // _memUsage_Compress = Calc_From_Val_Percents(memAvail, 80); _memUsage_Compress = Calc_From_Val_Percents_Less100(memAvail, 80); _memUsage_Decompress = memAvail / 32 * 17; } } public: #ifndef Z7_ST UInt32 _numThreads; UInt32 _numProcessors; bool _numThreads_WasForced; #endif bool _memUsage_WasSet; UInt64 _memUsage_Compress; UInt64 _memUsage_Decompress; UInt64 _memAvail; bool SetCommonProperty(const UString &name, const PROPVARIANT &value, HRESULT &hres); CCommonMethodProps() { InitCommon(); } }; #ifndef Z7_EXTRACT_ONLY class CMultiMethodProps: public CCommonMethodProps { UInt32 _level; int _analysisLevel; void InitMulti(); public: UInt32 _crcSize; CObjectVector _methods; COneMethodInfo _filterMethod; bool _autoFilter; void SetGlobalLevelTo(COneMethodInfo &oneMethodInfo) const; #ifndef Z7_ST static void SetMethodThreadsTo_IfNotFinded(CMethodProps &props, UInt32 numThreads); static void SetMethodThreadsTo_Replace(CMethodProps &props, UInt32 numThreads); #endif unsigned GetNumEmptyMethods() const { unsigned i; for (i = 0; i < _methods.Size(); i++) if (!_methods[i].IsEmpty()) break; return i; } int GetLevel() const { return _level == (UInt32)(Int32)-1 ? 5 : (int)_level; } int GetAnalysisLevel() const { return _analysisLevel; } void Init(); CMultiMethodProps() { InitMulti(); } HRESULT SetProperty(const wchar_t *name, const PROPVARIANT &value); }; class CSingleMethodProps: public COneMethodInfo, public CCommonMethodProps { UInt32 _level; void InitSingle() { _level = (UInt32)(Int32)-1; } public: void Init(); CSingleMethodProps() { InitSingle(); } int GetLevel() const { return _level == (UInt32)(Int32)-1 ? 5 : (int)_level; } HRESULT SetProperty(const wchar_t *name, const PROPVARIANT &values); HRESULT SetProperties(const wchar_t * const *names, const PROPVARIANT *values, UInt32 numProps); }; #endif struct CHandlerTimeOptions { CBoolPair Write_MTime; CBoolPair Write_ATime; CBoolPair Write_CTime; UInt32 Prec; void Init() { Write_MTime.Init(); Write_MTime.Val = true; Write_ATime.Init(); Write_CTime.Init(); Prec = (UInt32)(Int32)-1; } CHandlerTimeOptions() { Init(); } HRESULT Parse(const UString &name, const PROPVARIANT &prop, bool &processed); }; } #endif