mirror of
https://github.com/holub/mame
synced 2025-06-28 23:24:23 +03:00
155 lines
3.4 KiB
C++
155 lines
3.4 KiB
C++
// 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
|