1*f6dc9357SAndroid Build Coastguard Worker // HandlerOut.h 2*f6dc9357SAndroid Build Coastguard Worker 3*f6dc9357SAndroid Build Coastguard Worker #ifndef ZIP7_INC_HANDLER_OUT_H 4*f6dc9357SAndroid Build Coastguard Worker #define ZIP7_INC_HANDLER_OUT_H 5*f6dc9357SAndroid Build Coastguard Worker 6*f6dc9357SAndroid Build Coastguard Worker #include "../../../Windows/System.h" 7*f6dc9357SAndroid Build Coastguard Worker 8*f6dc9357SAndroid Build Coastguard Worker #include "../../Common/MethodProps.h" 9*f6dc9357SAndroid Build Coastguard Worker 10*f6dc9357SAndroid Build Coastguard Worker namespace NArchive { 11*f6dc9357SAndroid Build Coastguard Worker 12*f6dc9357SAndroid Build Coastguard Worker bool ParseSizeString(const wchar_t *name, const PROPVARIANT &prop, UInt64 percentsBase, UInt64 &res); 13*f6dc9357SAndroid Build Coastguard Worker 14*f6dc9357SAndroid Build Coastguard Worker class CCommonMethodProps 15*f6dc9357SAndroid Build Coastguard Worker { 16*f6dc9357SAndroid Build Coastguard Worker protected: InitCommon()17*f6dc9357SAndroid Build Coastguard Worker void InitCommon() 18*f6dc9357SAndroid Build Coastguard Worker { 19*f6dc9357SAndroid Build Coastguard Worker // _Write_MTime = true; 20*f6dc9357SAndroid Build Coastguard Worker #ifndef Z7_ST 21*f6dc9357SAndroid Build Coastguard Worker _numProcessors = _numThreads = NWindows::NSystem::GetNumberOfProcessors(); 22*f6dc9357SAndroid Build Coastguard Worker _numThreads_WasForced = false; 23*f6dc9357SAndroid Build Coastguard Worker #endif 24*f6dc9357SAndroid Build Coastguard Worker 25*f6dc9357SAndroid Build Coastguard Worker size_t memAvail = (size_t)sizeof(size_t) << 28; 26*f6dc9357SAndroid Build Coastguard Worker _memAvail = memAvail; 27*f6dc9357SAndroid Build Coastguard Worker _memUsage_Compress = memAvail; 28*f6dc9357SAndroid Build Coastguard Worker _memUsage_Decompress = memAvail; 29*f6dc9357SAndroid Build Coastguard Worker _memUsage_WasSet = NWindows::NSystem::GetRamSize(memAvail); 30*f6dc9357SAndroid Build Coastguard Worker if (_memUsage_WasSet) 31*f6dc9357SAndroid Build Coastguard Worker { 32*f6dc9357SAndroid Build Coastguard Worker _memAvail = memAvail; 33*f6dc9357SAndroid Build Coastguard Worker unsigned bits = sizeof(size_t) * 8; 34*f6dc9357SAndroid Build Coastguard Worker if (bits == 32) 35*f6dc9357SAndroid Build Coastguard Worker { 36*f6dc9357SAndroid Build Coastguard Worker const UInt32 limit2 = (UInt32)7 << 28; 37*f6dc9357SAndroid Build Coastguard Worker if (memAvail > limit2) 38*f6dc9357SAndroid Build Coastguard Worker memAvail = limit2; 39*f6dc9357SAndroid Build Coastguard Worker } 40*f6dc9357SAndroid Build Coastguard Worker // 80% - is auto usage limit in handlers 41*f6dc9357SAndroid Build Coastguard Worker // _memUsage_Compress = memAvail * 4 / 5; 42*f6dc9357SAndroid Build Coastguard Worker // _memUsage_Compress = Calc_From_Val_Percents(memAvail, 80); 43*f6dc9357SAndroid Build Coastguard Worker _memUsage_Compress = Calc_From_Val_Percents_Less100(memAvail, 80); 44*f6dc9357SAndroid Build Coastguard Worker _memUsage_Decompress = memAvail / 32 * 17; 45*f6dc9357SAndroid Build Coastguard Worker } 46*f6dc9357SAndroid Build Coastguard Worker } 47*f6dc9357SAndroid Build Coastguard Worker 48*f6dc9357SAndroid Build Coastguard Worker public: 49*f6dc9357SAndroid Build Coastguard Worker #ifndef Z7_ST 50*f6dc9357SAndroid Build Coastguard Worker UInt32 _numThreads; 51*f6dc9357SAndroid Build Coastguard Worker UInt32 _numProcessors; 52*f6dc9357SAndroid Build Coastguard Worker bool _numThreads_WasForced; 53*f6dc9357SAndroid Build Coastguard Worker #endif 54*f6dc9357SAndroid Build Coastguard Worker 55*f6dc9357SAndroid Build Coastguard Worker bool _memUsage_WasSet; 56*f6dc9357SAndroid Build Coastguard Worker UInt64 _memUsage_Compress; 57*f6dc9357SAndroid Build Coastguard Worker UInt64 _memUsage_Decompress; 58*f6dc9357SAndroid Build Coastguard Worker size_t _memAvail; 59*f6dc9357SAndroid Build Coastguard Worker 60*f6dc9357SAndroid Build Coastguard Worker bool SetCommonProperty(const UString &name, const PROPVARIANT &value, HRESULT &hres); 61*f6dc9357SAndroid Build Coastguard Worker CCommonMethodProps()62*f6dc9357SAndroid Build Coastguard Worker CCommonMethodProps() { InitCommon(); } 63*f6dc9357SAndroid Build Coastguard Worker }; 64*f6dc9357SAndroid Build Coastguard Worker 65*f6dc9357SAndroid Build Coastguard Worker 66*f6dc9357SAndroid Build Coastguard Worker #ifndef Z7_EXTRACT_ONLY 67*f6dc9357SAndroid Build Coastguard Worker 68*f6dc9357SAndroid Build Coastguard Worker class CMultiMethodProps: public CCommonMethodProps 69*f6dc9357SAndroid Build Coastguard Worker { 70*f6dc9357SAndroid Build Coastguard Worker UInt32 _level; 71*f6dc9357SAndroid Build Coastguard Worker int _analysisLevel; 72*f6dc9357SAndroid Build Coastguard Worker 73*f6dc9357SAndroid Build Coastguard Worker void InitMulti(); 74*f6dc9357SAndroid Build Coastguard Worker public: 75*f6dc9357SAndroid Build Coastguard Worker UInt32 _crcSize; 76*f6dc9357SAndroid Build Coastguard Worker CObjectVector<COneMethodInfo> _methods; 77*f6dc9357SAndroid Build Coastguard Worker COneMethodInfo _filterMethod; 78*f6dc9357SAndroid Build Coastguard Worker bool _autoFilter; 79*f6dc9357SAndroid Build Coastguard Worker 80*f6dc9357SAndroid Build Coastguard Worker 81*f6dc9357SAndroid Build Coastguard Worker void SetGlobalLevelTo(COneMethodInfo &oneMethodInfo) const; 82*f6dc9357SAndroid Build Coastguard Worker 83*f6dc9357SAndroid Build Coastguard Worker #ifndef Z7_ST 84*f6dc9357SAndroid Build Coastguard Worker static void SetMethodThreadsTo_IfNotFinded(CMethodProps &props, UInt32 numThreads); 85*f6dc9357SAndroid Build Coastguard Worker static void SetMethodThreadsTo_Replace(CMethodProps &props, UInt32 numThreads); 86*f6dc9357SAndroid Build Coastguard Worker #endif 87*f6dc9357SAndroid Build Coastguard Worker 88*f6dc9357SAndroid Build Coastguard Worker GetNumEmptyMethods()89*f6dc9357SAndroid Build Coastguard Worker unsigned GetNumEmptyMethods() const 90*f6dc9357SAndroid Build Coastguard Worker { 91*f6dc9357SAndroid Build Coastguard Worker unsigned i; 92*f6dc9357SAndroid Build Coastguard Worker for (i = 0; i < _methods.Size(); i++) 93*f6dc9357SAndroid Build Coastguard Worker if (!_methods[i].IsEmpty()) 94*f6dc9357SAndroid Build Coastguard Worker break; 95*f6dc9357SAndroid Build Coastguard Worker return i; 96*f6dc9357SAndroid Build Coastguard Worker } 97*f6dc9357SAndroid Build Coastguard Worker GetLevel()98*f6dc9357SAndroid Build Coastguard Worker int GetLevel() const { return _level == (UInt32)(Int32)-1 ? 5 : (int)_level; } GetAnalysisLevel()99*f6dc9357SAndroid Build Coastguard Worker int GetAnalysisLevel() const { return _analysisLevel; } 100*f6dc9357SAndroid Build Coastguard Worker 101*f6dc9357SAndroid Build Coastguard Worker void Init(); CMultiMethodProps()102*f6dc9357SAndroid Build Coastguard Worker CMultiMethodProps() { InitMulti(); } 103*f6dc9357SAndroid Build Coastguard Worker 104*f6dc9357SAndroid Build Coastguard Worker HRESULT SetProperty(const wchar_t *name, const PROPVARIANT &value); 105*f6dc9357SAndroid Build Coastguard Worker }; 106*f6dc9357SAndroid Build Coastguard Worker 107*f6dc9357SAndroid Build Coastguard Worker 108*f6dc9357SAndroid Build Coastguard Worker class CSingleMethodProps: public COneMethodInfo, public CCommonMethodProps 109*f6dc9357SAndroid Build Coastguard Worker { 110*f6dc9357SAndroid Build Coastguard Worker UInt32 _level; 111*f6dc9357SAndroid Build Coastguard Worker InitSingle()112*f6dc9357SAndroid Build Coastguard Worker void InitSingle() 113*f6dc9357SAndroid Build Coastguard Worker { 114*f6dc9357SAndroid Build Coastguard Worker _level = (UInt32)(Int32)-1; 115*f6dc9357SAndroid Build Coastguard Worker } 116*f6dc9357SAndroid Build Coastguard Worker 117*f6dc9357SAndroid Build Coastguard Worker public: 118*f6dc9357SAndroid Build Coastguard Worker void Init(); CSingleMethodProps()119*f6dc9357SAndroid Build Coastguard Worker CSingleMethodProps() { InitSingle(); } 120*f6dc9357SAndroid Build Coastguard Worker GetLevel()121*f6dc9357SAndroid Build Coastguard Worker int GetLevel() const { return _level == (UInt32)(Int32)-1 ? 5 : (int)_level; } 122*f6dc9357SAndroid Build Coastguard Worker HRESULT SetProperty(const wchar_t *name, const PROPVARIANT &values); 123*f6dc9357SAndroid Build Coastguard Worker HRESULT SetProperties(const wchar_t * const *names, const PROPVARIANT *values, UInt32 numProps); 124*f6dc9357SAndroid Build Coastguard Worker }; 125*f6dc9357SAndroid Build Coastguard Worker 126*f6dc9357SAndroid Build Coastguard Worker #endif 127*f6dc9357SAndroid Build Coastguard Worker 128*f6dc9357SAndroid Build Coastguard Worker struct CHandlerTimeOptions 129*f6dc9357SAndroid Build Coastguard Worker { 130*f6dc9357SAndroid Build Coastguard Worker CBoolPair Write_MTime; 131*f6dc9357SAndroid Build Coastguard Worker CBoolPair Write_ATime; 132*f6dc9357SAndroid Build Coastguard Worker CBoolPair Write_CTime; 133*f6dc9357SAndroid Build Coastguard Worker UInt32 Prec; 134*f6dc9357SAndroid Build Coastguard Worker InitCHandlerTimeOptions135*f6dc9357SAndroid Build Coastguard Worker void Init() 136*f6dc9357SAndroid Build Coastguard Worker { 137*f6dc9357SAndroid Build Coastguard Worker Write_MTime.Init(); 138*f6dc9357SAndroid Build Coastguard Worker Write_MTime.Val = true; 139*f6dc9357SAndroid Build Coastguard Worker Write_ATime.Init(); 140*f6dc9357SAndroid Build Coastguard Worker Write_CTime.Init(); 141*f6dc9357SAndroid Build Coastguard Worker Prec = (UInt32)(Int32)-1; 142*f6dc9357SAndroid Build Coastguard Worker } 143*f6dc9357SAndroid Build Coastguard Worker CHandlerTimeOptionsCHandlerTimeOptions144*f6dc9357SAndroid Build Coastguard Worker CHandlerTimeOptions() 145*f6dc9357SAndroid Build Coastguard Worker { 146*f6dc9357SAndroid Build Coastguard Worker Init(); 147*f6dc9357SAndroid Build Coastguard Worker } 148*f6dc9357SAndroid Build Coastguard Worker 149*f6dc9357SAndroid Build Coastguard Worker HRESULT Parse(const UString &name, const PROPVARIANT &prop, bool &processed); 150*f6dc9357SAndroid Build Coastguard Worker }; 151*f6dc9357SAndroid Build Coastguard Worker 152*f6dc9357SAndroid Build Coastguard Worker } 153*f6dc9357SAndroid Build Coastguard Worker 154*f6dc9357SAndroid Build Coastguard Worker #endif 155