STDMETHODIMP CHandler::SetProperties(const wchar_t **names, const PROPVARIANT *values, Int32 numProperties) { InitMethodProperties(); #ifdef COMPRESS_MT const UInt32 numProcessors = NSystem::GetNumberOfProcessors(); _numThreads = numProcessors; #endif for (int i = 0; i < numProperties; i++) { UString name = UString(names[i]); name.MakeUpper(); if (name.IsEmpty()) return E_INVALIDARG; const PROPVARIANT &prop = values[i]; if (name[0] == 'X') { UInt32 level = 9; RINOK(ParsePropValue(name.Mid(1), prop, level)); _level = level; continue; } if (name[0] == 'D') { UInt32 dicSize = kDicSizeX5; RINOK(ParsePropDictionaryValue(name.Mid(1), prop, dicSize)); _dicSize = dicSize; continue; } if (name.Left(4) == L"PASS") { UInt32 num = kNumPassesX9; RINOK(ParsePropValue(name.Mid(4), prop, num)); _numPasses = num; continue; } if (name.Left(2) == L"MT") { #ifdef COMPRESS_MT RINOK(ParseMtProp(name.Mid(2), prop, numProcessors, _numThreads)); #endif continue; } return E_INVALIDARG; } return S_OK; }
STDMETHODIMP CHandler::SetProperties(const wchar_t **names, const PROPVARIANT *values, Int32 numProperties) { InitMethodProperties(); for (int i = 0; i < numProperties; i++) { UString name = names[i]; name.MakeUpper(); const PROPVARIANT &prop = values[i]; if (name[0] == L'X') { UInt32 level = 9; RINOK(ParsePropValue(name.Mid(1), prop, level)); m_Level = level; } else if (name.Left(4) == L"PASS") { UInt32 num = kNumPassesX9; RINOK(ParsePropValue(name.Mid(4), prop, num)); m_Method.NumPasses = num; } else if (name.Left(2) == L"FB") { UInt32 num = kNumFastBytesX9; RINOK(ParsePropValue(name.Mid(2), prop, num)); m_Method.NumFastBytes = num; } else if (name.Left(2) == L"MC") { UInt32 num = 0xFFFFFFFF; RINOK(ParsePropValue(name.Mid(2), prop, num)); m_Method.NumMatchFinderCycles = num; m_Method.NumMatchFinderCyclesDefined = true; } else if (name.Left(1) == L"A") { UInt32 num = kAlgoX5; RINOK(ParsePropValue(name.Mid(1), prop, num)); m_Method.Algo = num; } else return E_INVALIDARG; } return S_OK; }