| // 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<COneMethodInfo> _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 |