• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // HandlerOut.h
2 
3 #ifndef __HANDLER_OUT_H
4 #define __HANDLER_OUT_H
5 
6 #include "../../../Windows/System.h"
7 
8 #include "../../Common/MethodProps.h"
9 
10 namespace NArchive {
11 
12 bool ParseSizeString(const wchar_t *name, const PROPVARIANT &prop, UInt64 percentsBase, UInt64 &res);
13 
14 class CCommonMethodProps
15 {
16 protected:
InitCommon()17   void InitCommon()
18   {
19     #ifndef _7ZIP_ST
20     _numProcessors = _numThreads = NWindows::NSystem::GetNumberOfProcessors();
21     #endif
22 
23     UInt64 memAvail = (UInt64)(sizeof(size_t)) << 28;
24     _memAvail = memAvail;
25     _memUsage = memAvail;
26     if (NWindows::NSystem::GetRamSize(memAvail))
27     {
28       _memAvail = memAvail;
29       _memUsage = memAvail / 32 * 17;
30     }
31   }
32 
33 public:
34   #ifndef _7ZIP_ST
35   UInt32 _numThreads;
36   UInt32 _numProcessors;
37   #endif
38 
39   UInt64 _memUsage;
40   UInt64 _memAvail;
41 
42   bool SetCommonProperty(const UString &name, const PROPVARIANT &value, HRESULT &hres);
43 
CCommonMethodProps()44   CCommonMethodProps() { InitCommon(); }
45 };
46 
47 
48 #ifndef EXTRACT_ONLY
49 
50 class CMultiMethodProps: public CCommonMethodProps
51 {
52   UInt32 _level;
53   int _analysisLevel;
54 
55   void InitMulti();
56 public:
57   UInt32 _crcSize;
58   CObjectVector<COneMethodInfo> _methods;
59   COneMethodInfo _filterMethod;
60   bool _autoFilter;
61 
62 
63   void SetGlobalLevelTo(COneMethodInfo &oneMethodInfo) const;
64 
65   #ifndef _7ZIP_ST
66   static void SetMethodThreadsTo(COneMethodInfo &oneMethodInfo, UInt32 numThreads);
67   #endif
68 
69 
GetNumEmptyMethods()70   unsigned GetNumEmptyMethods() const
71   {
72     unsigned i;
73     for (i = 0; i < _methods.Size(); i++)
74       if (!_methods[i].IsEmpty())
75         break;
76     return i;
77   }
78 
GetLevel()79   int GetLevel() const { return _level == (UInt32)(Int32)-1 ? 5 : (int)_level; }
GetAnalysisLevel()80   int GetAnalysisLevel() const { return _analysisLevel; }
81 
82   void Init();
CMultiMethodProps()83   CMultiMethodProps() { InitMulti(); }
84 
85   HRESULT SetProperty(const wchar_t *name, const PROPVARIANT &value);
86 };
87 
88 
89 class CSingleMethodProps: public COneMethodInfo, public CCommonMethodProps
90 {
91   UInt32 _level;
92 
InitSingle()93   void InitSingle()
94   {
95     _level = (UInt32)(Int32)-1;
96   }
97 
98 public:
99   void Init();
CSingleMethodProps()100   CSingleMethodProps() { InitSingle(); }
101 
GetLevel()102   int GetLevel() const { return _level == (UInt32)(Int32)-1 ? 5 : (int)_level; }
103   HRESULT SetProperties(const wchar_t * const *names, const PROPVARIANT *values, UInt32 numProps);
104 };
105 
106 #endif
107 
108 }
109 
110 #endif
111