| Index: third_party/lzma/v4_65/files/CPP/7zip/Archive/Common/HandlerOut.cpp
|
| diff --git a/third_party/lzma/v4_65/files/CPP/7zip/Archive/Common/HandlerOut.cpp b/third_party/lzma/v4_65/files/CPP/7zip/Archive/Common/HandlerOut.cpp
|
| deleted file mode 100644
|
| index 76739e94c8af0619c967130ae8ed7e8e03b68bbd..0000000000000000000000000000000000000000
|
| --- a/third_party/lzma/v4_65/files/CPP/7zip/Archive/Common/HandlerOut.cpp
|
| +++ /dev/null
|
| @@ -1,620 +0,0 @@
|
| -// HandlerOut.cpp
|
| -
|
| -#include "StdAfx.h"
|
| -
|
| -#include "../../../Common/StringToInt.h"
|
| -
|
| -#include "../../../Windows/PropVariant.h"
|
| -
|
| -#ifdef COMPRESS_MT
|
| -#include "../../../Windows/System.h"
|
| -#endif
|
| -
|
| -#include "../../ICoder.h"
|
| -
|
| -#include "../Common/ParseProperties.h"
|
| -
|
| -#include "HandlerOut.h"
|
| -
|
| -using namespace NWindows;
|
| -
|
| -namespace NArchive {
|
| -
|
| -static const wchar_t *kCopyMethod = L"Copy";
|
| -static const wchar_t *kLZMAMethodName = L"LZMA";
|
| -static const wchar_t *kLZMA2MethodName = L"LZMA2";
|
| -static const wchar_t *kBZip2MethodName = L"BZip2";
|
| -static const wchar_t *kPpmdMethodName = L"PPMd";
|
| -static const wchar_t *kDeflateMethodName = L"Deflate";
|
| -static const wchar_t *kDeflate64MethodName = L"Deflate64";
|
| -
|
| -static const wchar_t *kLzmaMatchFinderX1 = L"HC4";
|
| -static const wchar_t *kLzmaMatchFinderX5 = L"BT4";
|
| -
|
| -static const UInt32 kLzmaAlgoX1 = 0;
|
| -static const UInt32 kLzmaAlgoX5 = 1;
|
| -
|
| -static const UInt32 kLzmaDicSizeX1 = 1 << 16;
|
| -static const UInt32 kLzmaDicSizeX3 = 1 << 20;
|
| -static const UInt32 kLzmaDicSizeX5 = 1 << 24;
|
| -static const UInt32 kLzmaDicSizeX7 = 1 << 25;
|
| -static const UInt32 kLzmaDicSizeX9 = 1 << 26;
|
| -
|
| -static const UInt32 kLzmaFastBytesX1 = 32;
|
| -static const UInt32 kLzmaFastBytesX7 = 64;
|
| -
|
| -static const UInt32 kPpmdMemSizeX1 = (1 << 22);
|
| -static const UInt32 kPpmdMemSizeX5 = (1 << 24);
|
| -static const UInt32 kPpmdMemSizeX7 = (1 << 26);
|
| -static const UInt32 kPpmdMemSizeX9 = (192 << 20);
|
| -
|
| -static const UInt32 kPpmdOrderX1 = 4;
|
| -static const UInt32 kPpmdOrderX5 = 6;
|
| -static const UInt32 kPpmdOrderX7 = 16;
|
| -static const UInt32 kPpmdOrderX9 = 32;
|
| -
|
| -static const UInt32 kDeflateAlgoX1 = 0;
|
| -static const UInt32 kDeflateAlgoX5 = 1;
|
| -
|
| -static const UInt32 kDeflateFastBytesX1 = 32;
|
| -static const UInt32 kDeflateFastBytesX7 = 64;
|
| -static const UInt32 kDeflateFastBytesX9 = 128;
|
| -
|
| -static const UInt32 kDeflatePassesX1 = 1;
|
| -static const UInt32 kDeflatePassesX7 = 3;
|
| -static const UInt32 kDeflatePassesX9 = 10;
|
| -
|
| -static const UInt32 kBZip2NumPassesX1 = 1;
|
| -static const UInt32 kBZip2NumPassesX7 = 2;
|
| -static const UInt32 kBZip2NumPassesX9 = 7;
|
| -
|
| -static const UInt32 kBZip2DicSizeX1 = 100000;
|
| -static const UInt32 kBZip2DicSizeX3 = 500000;
|
| -static const UInt32 kBZip2DicSizeX5 = 900000;
|
| -
|
| -static const wchar_t *kDefaultMethodName = kLZMAMethodName;
|
| -
|
| -static const wchar_t *kLzmaMatchFinderForHeaders = L"BT2";
|
| -static const UInt32 kDictionaryForHeaders = 1 << 20;
|
| -static const UInt32 kNumFastBytesForHeaders = 273;
|
| -static const UInt32 kAlgorithmForHeaders = kLzmaAlgoX5;
|
| -
|
| -static bool AreEqual(const UString &methodName, const wchar_t *s)
|
| - { return (methodName.CompareNoCase(s) == 0); }
|
| -
|
| -static inline bool IsLZMAMethod(const UString &methodName)
|
| -{
|
| - return
|
| - AreEqual(methodName, kLZMAMethodName) ||
|
| - AreEqual(methodName, kLZMA2MethodName);
|
| -}
|
| -
|
| -static inline bool IsBZip2Method(const UString &methodName)
|
| - { return AreEqual(methodName, kBZip2MethodName); }
|
| -
|
| -static inline bool IsPpmdMethod(const UString &methodName)
|
| - { return AreEqual(methodName, kPpmdMethodName); }
|
| -
|
| -static inline bool IsDeflateMethod(const UString &methodName)
|
| -{
|
| - return
|
| - AreEqual(methodName, kDeflateMethodName) ||
|
| - AreEqual(methodName, kDeflate64MethodName);
|
| -}
|
| -
|
| -struct CNameToPropID
|
| -{
|
| - PROPID PropID;
|
| - VARTYPE VarType;
|
| - const wchar_t *Name;
|
| -};
|
| -
|
| -CNameToPropID g_NameToPropID[] =
|
| -{
|
| - { NCoderPropID::kOrder, VT_UI4, L"O" },
|
| - { NCoderPropID::kPosStateBits, VT_UI4, L"PB" },
|
| - { NCoderPropID::kLitContextBits, VT_UI4, L"LC" },
|
| - { NCoderPropID::kLitPosBits, VT_UI4, L"LP" },
|
| - { NCoderPropID::kEndMarker, VT_BOOL, L"eos" },
|
| -
|
| - { NCoderPropID::kNumPasses, VT_UI4, L"Pass" },
|
| - { NCoderPropID::kNumFastBytes, VT_UI4, L"fb" },
|
| - { NCoderPropID::kMatchFinderCycles, VT_UI4, L"mc" },
|
| - { NCoderPropID::kAlgorithm, VT_UI4, L"a" },
|
| - { NCoderPropID::kMatchFinder, VT_BSTR, L"mf" },
|
| - { NCoderPropID::kNumThreads, VT_UI4, L"mt" }
|
| -};
|
| -
|
| -static bool ConvertProperty(PROPVARIANT srcProp, VARTYPE varType, NCOM::CPropVariant &destProp)
|
| -{
|
| - if (varType == srcProp.vt)
|
| - {
|
| - destProp = srcProp;
|
| - return true;
|
| - }
|
| - if (varType == VT_UI1)
|
| - {
|
| - if (srcProp.vt == VT_UI4)
|
| - {
|
| - UInt32 value = srcProp.ulVal;
|
| - if (value > 0xFF)
|
| - return false;
|
| - destProp = (Byte)value;
|
| - return true;
|
| - }
|
| - }
|
| - else if (varType == VT_BOOL)
|
| - {
|
| - bool res;
|
| - if (SetBoolProperty(res, srcProp) != S_OK)
|
| - return false;
|
| - destProp = res;
|
| - return true;
|
| - }
|
| - return false;
|
| -}
|
| -
|
| -static int FindPropIdFromStringName(const UString &name)
|
| -{
|
| - for (int i = 0; i < sizeof(g_NameToPropID) / sizeof(g_NameToPropID[0]); i++)
|
| - if (name.CompareNoCase(g_NameToPropID[i].Name) == 0)
|
| - return i;
|
| - return -1;
|
| -}
|
| -
|
| -static void SetOneMethodProp(COneMethodInfo &oneMethodInfo, PROPID propID,
|
| - const NWindows::NCOM::CPropVariant &value)
|
| -{
|
| - for (int j = 0; j < oneMethodInfo.Props.Size(); j++)
|
| - if (oneMethodInfo.Props[j].Id == propID)
|
| - return;
|
| - CProp prop;
|
| - prop.Id = propID;
|
| - prop.Value = value;
|
| - oneMethodInfo.Props.Add(prop);
|
| -}
|
| -
|
| -void COutHandler::SetCompressionMethod2(COneMethodInfo &oneMethodInfo
|
| - #ifdef COMPRESS_MT
|
| - , UInt32 numThreads
|
| - #endif
|
| - )
|
| -{
|
| - UInt32 level = _level;
|
| - if (oneMethodInfo.MethodName.IsEmpty())
|
| - oneMethodInfo.MethodName = kDefaultMethodName;
|
| -
|
| - if (IsLZMAMethod(oneMethodInfo.MethodName))
|
| - {
|
| - UInt32 dicSize =
|
| - (level >= 9 ? kLzmaDicSizeX9 :
|
| - (level >= 7 ? kLzmaDicSizeX7 :
|
| - (level >= 5 ? kLzmaDicSizeX5 :
|
| - (level >= 3 ? kLzmaDicSizeX3 :
|
| - kLzmaDicSizeX1))));
|
| -
|
| - UInt32 algo =
|
| - (level >= 5 ? kLzmaAlgoX5 :
|
| - kLzmaAlgoX1);
|
| -
|
| - UInt32 fastBytes =
|
| - (level >= 7 ? kLzmaFastBytesX7 :
|
| - kLzmaFastBytesX1);
|
| -
|
| - const wchar_t *matchFinder =
|
| - (level >= 5 ? kLzmaMatchFinderX5 :
|
| - kLzmaMatchFinderX1);
|
| -
|
| - SetOneMethodProp(oneMethodInfo, NCoderPropID::kDictionarySize, dicSize);
|
| - SetOneMethodProp(oneMethodInfo, NCoderPropID::kAlgorithm, algo);
|
| - SetOneMethodProp(oneMethodInfo, NCoderPropID::kNumFastBytes, fastBytes);
|
| - SetOneMethodProp(oneMethodInfo, NCoderPropID::kMatchFinder, matchFinder);
|
| - #ifdef COMPRESS_MT
|
| - SetOneMethodProp(oneMethodInfo, NCoderPropID::kNumThreads, numThreads);
|
| - #endif
|
| - }
|
| - else if (IsDeflateMethod(oneMethodInfo.MethodName))
|
| - {
|
| - UInt32 fastBytes =
|
| - (level >= 9 ? kDeflateFastBytesX9 :
|
| - (level >= 7 ? kDeflateFastBytesX7 :
|
| - kDeflateFastBytesX1));
|
| -
|
| - UInt32 numPasses =
|
| - (level >= 9 ? kDeflatePassesX9 :
|
| - (level >= 7 ? kDeflatePassesX7 :
|
| - kDeflatePassesX1));
|
| -
|
| - UInt32 algo =
|
| - (level >= 5 ? kDeflateAlgoX5 :
|
| - kDeflateAlgoX1);
|
| -
|
| - SetOneMethodProp(oneMethodInfo, NCoderPropID::kAlgorithm, algo);
|
| - SetOneMethodProp(oneMethodInfo, NCoderPropID::kNumFastBytes, fastBytes);
|
| - SetOneMethodProp(oneMethodInfo, NCoderPropID::kNumPasses, numPasses);
|
| - }
|
| - else if (IsBZip2Method(oneMethodInfo.MethodName))
|
| - {
|
| - UInt32 numPasses =
|
| - (level >= 9 ? kBZip2NumPassesX9 :
|
| - (level >= 7 ? kBZip2NumPassesX7 :
|
| - kBZip2NumPassesX1));
|
| -
|
| - UInt32 dicSize =
|
| - (level >= 5 ? kBZip2DicSizeX5 :
|
| - (level >= 3 ? kBZip2DicSizeX3 :
|
| - kBZip2DicSizeX1));
|
| -
|
| - SetOneMethodProp(oneMethodInfo, NCoderPropID::kNumPasses, numPasses);
|
| - SetOneMethodProp(oneMethodInfo, NCoderPropID::kDictionarySize, dicSize);
|
| - #ifdef COMPRESS_MT
|
| - SetOneMethodProp(oneMethodInfo, NCoderPropID::kNumThreads, numThreads);
|
| - #endif
|
| - }
|
| - else if (IsPpmdMethod(oneMethodInfo.MethodName))
|
| - {
|
| - UInt32 useMemSize =
|
| - (level >= 9 ? kPpmdMemSizeX9 :
|
| - (level >= 7 ? kPpmdMemSizeX7 :
|
| - (level >= 5 ? kPpmdMemSizeX5 :
|
| - kPpmdMemSizeX1)));
|
| -
|
| - UInt32 order =
|
| - (level >= 9 ? kPpmdOrderX9 :
|
| - (level >= 7 ? kPpmdOrderX7 :
|
| - (level >= 5 ? kPpmdOrderX5 :
|
| - kPpmdOrderX1)));
|
| -
|
| - SetOneMethodProp(oneMethodInfo, NCoderPropID::kUsedMemorySize, useMemSize);
|
| - SetOneMethodProp(oneMethodInfo, NCoderPropID::kOrder, order);
|
| - }
|
| -}
|
| -
|
| -static void SplitParams(const UString &srcString, UStringVector &subStrings)
|
| -{
|
| - subStrings.Clear();
|
| - UString name;
|
| - int len = srcString.Length();
|
| - if (len == 0)
|
| - return;
|
| - for (int i = 0; i < len; i++)
|
| - {
|
| - wchar_t c = srcString[i];
|
| - if (c == L':')
|
| - {
|
| - subStrings.Add(name);
|
| - name.Empty();
|
| - }
|
| - else
|
| - name += c;
|
| - }
|
| - subStrings.Add(name);
|
| -}
|
| -
|
| -static void SplitParam(const UString ¶m, UString &name, UString &value)
|
| -{
|
| - int eqPos = param.Find(L'=');
|
| - if (eqPos >= 0)
|
| - {
|
| - name = param.Left(eqPos);
|
| - value = param.Mid(eqPos + 1);
|
| - return;
|
| - }
|
| - for(int i = 0; i < param.Length(); i++)
|
| - {
|
| - wchar_t c = param[i];
|
| - if (c >= L'0' && c <= L'9')
|
| - {
|
| - name = param.Left(i);
|
| - value = param.Mid(i);
|
| - return;
|
| - }
|
| - }
|
| - name = param;
|
| -}
|
| -
|
| -HRESULT COutHandler::SetParam(COneMethodInfo &oneMethodInfo, const UString &name, const UString &value)
|
| -{
|
| - CProp prop;
|
| - if (name.CompareNoCase(L"D") == 0 ||
|
| - name.CompareNoCase(L"MEM") == 0)
|
| - {
|
| - UInt32 dicSize;
|
| - RINOK(ParsePropDictionaryValue(value, dicSize));
|
| - prop.Id = (name.CompareNoCase(L"D") == 0) ?
|
| - NCoderPropID::kDictionarySize :
|
| - NCoderPropID::kUsedMemorySize;
|
| - prop.Value = dicSize;
|
| - }
|
| - else
|
| - {
|
| - int index = FindPropIdFromStringName(name);
|
| - if (index < 0)
|
| - return E_INVALIDARG;
|
| -
|
| - const CNameToPropID &nameToPropID = g_NameToPropID[index];
|
| - prop.Id = nameToPropID.PropID;
|
| -
|
| - NCOM::CPropVariant propValue;
|
| -
|
| - if (nameToPropID.VarType == VT_BSTR)
|
| - propValue = value;
|
| - else if (nameToPropID.VarType == VT_BOOL)
|
| - {
|
| - bool res;
|
| - if (!StringToBool(value, res))
|
| - return E_INVALIDARG;
|
| - propValue = res;
|
| - }
|
| - else
|
| - {
|
| - UInt32 number;
|
| - if (ParseStringToUInt32(value, number) == value.Length())
|
| - propValue = number;
|
| - else
|
| - propValue = value;
|
| - }
|
| -
|
| - if (!ConvertProperty(propValue, nameToPropID.VarType, prop.Value))
|
| - return E_INVALIDARG;
|
| - }
|
| - oneMethodInfo.Props.Add(prop);
|
| - return S_OK;
|
| -}
|
| -
|
| -HRESULT COutHandler::SetParams(COneMethodInfo &oneMethodInfo, const UString &srcString)
|
| -{
|
| - UStringVector params;
|
| - SplitParams(srcString, params);
|
| - if (params.Size() > 0)
|
| - oneMethodInfo.MethodName = params[0];
|
| - for (int i = 1; i < params.Size(); i++)
|
| - {
|
| - const UString ¶m = params[i];
|
| - UString name, value;
|
| - SplitParam(param, name, value);
|
| - RINOK(SetParam(oneMethodInfo, name, value));
|
| - }
|
| - return S_OK;
|
| -}
|
| -
|
| -HRESULT COutHandler::SetSolidSettings(const UString &s)
|
| -{
|
| - UString s2 = s;
|
| - s2.MakeUpper();
|
| - for (int i = 0; i < s2.Length();)
|
| - {
|
| - const wchar_t *start = ((const wchar_t *)s2) + i;
|
| - const wchar_t *end;
|
| - UInt64 v = ConvertStringToUInt64(start, &end);
|
| - if (start == end)
|
| - {
|
| - if (s2[i++] != 'E')
|
| - return E_INVALIDARG;
|
| - _solidExtension = true;
|
| - continue;
|
| - }
|
| - i += (int)(end - start);
|
| - if (i == s2.Length())
|
| - return E_INVALIDARG;
|
| - wchar_t c = s2[i++];
|
| - switch(c)
|
| - {
|
| - case 'F':
|
| - if (v < 1)
|
| - v = 1;
|
| - _numSolidFiles = v;
|
| - break;
|
| - case 'B':
|
| - _numSolidBytes = v;
|
| - _numSolidBytesDefined = true;
|
| - break;
|
| - case 'K':
|
| - _numSolidBytes = (v << 10);
|
| - _numSolidBytesDefined = true;
|
| - break;
|
| - case 'M':
|
| - _numSolidBytes = (v << 20);
|
| - _numSolidBytesDefined = true;
|
| - break;
|
| - case 'G':
|
| - _numSolidBytes = (v << 30);
|
| - _numSolidBytesDefined = true;
|
| - break;
|
| - default:
|
| - return E_INVALIDARG;
|
| - }
|
| - }
|
| - return S_OK;
|
| -}
|
| -
|
| -HRESULT COutHandler::SetSolidSettings(const PROPVARIANT &value)
|
| -{
|
| - bool isSolid;
|
| - switch(value.vt)
|
| - {
|
| - case VT_EMPTY:
|
| - isSolid = true;
|
| - break;
|
| - case VT_BOOL:
|
| - isSolid = (value.boolVal != VARIANT_FALSE);
|
| - break;
|
| - case VT_BSTR:
|
| - if (StringToBool(value.bstrVal, isSolid))
|
| - break;
|
| - return SetSolidSettings(value.bstrVal);
|
| - default:
|
| - return E_INVALIDARG;
|
| - }
|
| - if (isSolid)
|
| - InitSolid();
|
| - else
|
| - _numSolidFiles = 1;
|
| - return S_OK;
|
| -}
|
| -
|
| -void COutHandler::Init()
|
| -{
|
| - _removeSfxBlock = false;
|
| - _compressHeaders = true;
|
| - _encryptHeadersSpecified = false;
|
| - _encryptHeaders = false;
|
| -
|
| - WriteCTime = false;
|
| - WriteATime = false;
|
| - WriteMTime = true;
|
| -
|
| - #ifdef COMPRESS_MT
|
| - _numThreads = NWindows::NSystem::GetNumberOfProcessors();
|
| - #endif
|
| -
|
| - _level = 5;
|
| - _autoFilter = true;
|
| - _volumeMode = false;
|
| - _crcSize = 4;
|
| - InitSolid();
|
| -}
|
| -
|
| -void COutHandler::BeforeSetProperty()
|
| -{
|
| - Init();
|
| - #ifdef COMPRESS_MT
|
| - numProcessors = NSystem::GetNumberOfProcessors();
|
| - #endif
|
| -
|
| - mainDicSize = 0xFFFFFFFF;
|
| - mainDicMethodIndex = 0xFFFFFFFF;
|
| - minNumber = 0;
|
| - _crcSize = 4;
|
| -}
|
| -
|
| -HRESULT COutHandler::SetProperty(const wchar_t *nameSpec, const PROPVARIANT &value)
|
| -{
|
| - UString name = nameSpec;
|
| - name.MakeUpper();
|
| - if (name.IsEmpty())
|
| - return E_INVALIDARG;
|
| -
|
| - if (name[0] == 'X')
|
| - {
|
| - name.Delete(0);
|
| - _level = 9;
|
| - return ParsePropValue(name, value, _level);
|
| - }
|
| -
|
| - if (name[0] == L'S')
|
| - {
|
| - name.Delete(0);
|
| - if (name.IsEmpty())
|
| - return SetSolidSettings(value);
|
| - if (value.vt != VT_EMPTY)
|
| - return E_INVALIDARG;
|
| - return SetSolidSettings(name);
|
| - }
|
| -
|
| - if (name == L"CRC")
|
| - {
|
| - _crcSize = 4;
|
| - name.Delete(0, 3);
|
| - return ParsePropValue(name, value, _crcSize);
|
| - }
|
| -
|
| - UInt32 number;
|
| - int index = ParseStringToUInt32(name, number);
|
| - UString realName = name.Mid(index);
|
| - if (index == 0)
|
| - {
|
| - if(name.Left(2).CompareNoCase(L"MT") == 0)
|
| - {
|
| - #ifdef COMPRESS_MT
|
| - RINOK(ParseMtProp(name.Mid(2), value, numProcessors, _numThreads));
|
| - #endif
|
| - return S_OK;
|
| - }
|
| - if (name.CompareNoCase(L"RSFX") == 0) return SetBoolProperty(_removeSfxBlock, value);
|
| - if (name.CompareNoCase(L"F") == 0) return SetBoolProperty(_autoFilter, value);
|
| - if (name.CompareNoCase(L"HC") == 0) return SetBoolProperty(_compressHeaders, value);
|
| - if (name.CompareNoCase(L"HCF") == 0)
|
| - {
|
| - bool compressHeadersFull = true;
|
| - RINOK(SetBoolProperty(compressHeadersFull, value));
|
| - if (!compressHeadersFull)
|
| - return E_INVALIDARG;
|
| - return S_OK;
|
| - }
|
| - if (name.CompareNoCase(L"HE") == 0)
|
| - {
|
| - RINOK(SetBoolProperty(_encryptHeaders, value));
|
| - _encryptHeadersSpecified = true;
|
| - return S_OK;
|
| - }
|
| - if (name.CompareNoCase(L"TC") == 0) return SetBoolProperty(WriteCTime, value);
|
| - if (name.CompareNoCase(L"TA") == 0) return SetBoolProperty(WriteATime, value);
|
| - if (name.CompareNoCase(L"TM") == 0) return SetBoolProperty(WriteMTime, value);
|
| - if (name.CompareNoCase(L"V") == 0) return SetBoolProperty(_volumeMode, value);
|
| - number = 0;
|
| - }
|
| - if (number > 10000)
|
| - return E_FAIL;
|
| - if (number < minNumber)
|
| - return E_INVALIDARG;
|
| - number -= minNumber;
|
| - for(int j = _methods.Size(); j <= (int)number; j++)
|
| - {
|
| - COneMethodInfo oneMethodInfo;
|
| - _methods.Add(oneMethodInfo);
|
| - }
|
| -
|
| - COneMethodInfo &oneMethodInfo = _methods[number];
|
| -
|
| - if (realName.Length() == 0)
|
| - {
|
| - if (value.vt != VT_BSTR)
|
| - return E_INVALIDARG;
|
| -
|
| - RINOK(SetParams(oneMethodInfo, value.bstrVal));
|
| - }
|
| - else
|
| - {
|
| - CProp prop;
|
| - if (realName.Left(1).CompareNoCase(L"D") == 0)
|
| - {
|
| - UInt32 dicSize;
|
| - RINOK(ParsePropDictionaryValue(realName.Mid(1), value, dicSize));
|
| - prop.Id = NCoderPropID::kDictionarySize;
|
| - prop.Value = dicSize;
|
| - if (number <= mainDicMethodIndex)
|
| - mainDicSize = dicSize;
|
| - }
|
| - else if (realName.Left(1).CompareNoCase(L"C") == 0)
|
| - {
|
| - UInt32 blockSize;
|
| - RINOK(ParsePropDictionaryValue(realName.Mid(1), value, blockSize));
|
| - prop.Id = NCoderPropID::kBlockSize;
|
| - prop.Value = blockSize;
|
| - }
|
| - else if (realName.Left(3).CompareNoCase(L"MEM") == 0)
|
| - {
|
| - UInt32 dicSize;
|
| - RINOK(ParsePropDictionaryValue(realName.Mid(3), value, dicSize));
|
| - prop.Id = NCoderPropID::kUsedMemorySize;
|
| - prop.Value = dicSize;
|
| - if (number <= mainDicMethodIndex)
|
| - mainDicSize = dicSize;
|
| - }
|
| - else
|
| - {
|
| - int index = FindPropIdFromStringName(realName);
|
| - if (index < 0)
|
| - return E_INVALIDARG;
|
| - const CNameToPropID &nameToPropID = g_NameToPropID[index];
|
| - prop.Id = nameToPropID.PropID;
|
| - if (!ConvertProperty(value, nameToPropID.VarType, prop.Value))
|
| - return E_INVALIDARG;
|
| - }
|
| - oneMethodInfo.Props.Add(prop);
|
| - }
|
| - return S_OK;
|
| -}
|
| -
|
| -}
|
|
|