xref: /aosp_15_r20/external/lzma/CPP/7zip/Archive/Common/HandlerOut.h (revision f6dc9357d832569d4d1f5d24eacdb3935a1ae8e6)
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