5 #include "Windows/PropVariant.h"
\r
7 #include "Common/ParseProperties.h"
\r
9 #include "DeflateProps.h"
\r
11 namespace NArchive {
\r
13 static const UInt32 kAlgo1 = 0;
\r
14 static const UInt32 kAlgo5 = 1;
\r
16 static const UInt32 kPasses1 = 1;
\r
17 static const UInt32 kPasses7 = 3;
\r
18 static const UInt32 kPasses9 = 10;
\r
20 static const UInt32 kFb1 = 32;
\r
21 static const UInt32 kFb7 = 64;
\r
22 static const UInt32 kFb9 = 128;
\r
24 void CDeflateProps::Normalize()
\r
26 UInt32 level = Level;
\r
27 if (level == 0xFFFFFFFF)
\r
30 if (Algo == 0xFFFFFFFF)
\r
31 Algo = (level >= 5 ?
\r
35 if (NumPasses == 0xFFFFFFFF)
\r
37 (level >= 9 ? kPasses9 :
\r
38 (level >= 7 ? kPasses7 :
\r
40 if (Fb == 0xFFFFFFFF)
\r
42 (level >= 9 ? kFb9 :
\r
43 (level >= 7 ? kFb7 :
\r
47 HRESULT CDeflateProps::SetCoderProperties(ICompressSetCoderProperties *setCoderProperties)
\r
51 NWindows::NCOM::CPropVariant props[] =
\r
60 NCoderPropID::kAlgorithm,
\r
61 NCoderPropID::kNumPasses,
\r
62 NCoderPropID::kNumFastBytes,
\r
63 NCoderPropID::kMatchFinderCycles
\r
65 int numProps = sizeof(propIDs) / sizeof(propIDs[0]);
\r
68 return setCoderProperties->SetCoderProperties(propIDs, props, numProps);
\r
71 HRESULT CDeflateProps::SetProperties(const wchar_t **names, const PROPVARIANT *values, Int32 numProps)
\r
74 for (int i = 0; i < numProps; i++)
\r
76 UString name = names[i];
\r
79 return E_INVALIDARG;
\r
80 const PROPVARIANT &prop = values[i];
\r
81 if (name[0] == L'X')
\r
84 RINOK(ParsePropValue(name.Mid(1), prop, a));
\r
87 else if (name.Left(1) == L"A")
\r
90 RINOK(ParsePropValue(name.Mid(1), prop, a));
\r
93 else if (name.Left(4) == L"PASS")
\r
95 UInt32 a = kPasses9;
\r
96 RINOK(ParsePropValue(name.Mid(4), prop, a));
\r
99 else if (name.Left(2) == L"FB")
\r
102 RINOK(ParsePropValue(name.Mid(2), prop, a));
\r
105 else if (name.Left(2) == L"MC")
\r
107 UInt32 a = 0xFFFFFFFF;
\r
108 RINOK(ParsePropValue(name.Mid(2), prop, a));
\r
113 return E_INVALIDARG;
\r