// HandlerOut.h #ifndef __HANDLER_OUT_H #define __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() { #ifndef _7ZIP_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; } _memUsage_Compress = memAvail / 32 * 28; _memUsage_Decompress = memAvail / 32 * 17; } } public: #ifndef _7ZIP_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 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 _7ZIP_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 SetProperties(const wchar_t * const *names, const PROPVARIANT *values, UInt32 numProps); }; #endif } #endif