本文整理汇总了C++中tTJSVariant::NormalCompare方法的典型用法代码示例。如果您正苦于以下问题:C++ tTJSVariant::NormalCompare方法的具体用法?C++ tTJSVariant::NormalCompare怎么用?C++ tTJSVariant::NormalCompare使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类tTJSVariant
的用法示例。
在下文中一共展示了tTJSVariant::NormalCompare方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: closure
//----------------------------------------------------------------------
// 構造体比較関数(数字の比較はゆるい)
bool
ScriptsAdd::equalStructNumericLoose(tTJSVariant v1, tTJSVariant v2)
{
// タイプがオブジェクトなら特殊判定
if (v1.Type() == tvtObject
&& v2.Type() == tvtObject) {
if (v1.AsObjectNoAddRef() == v2.AsObjectNoAddRef())
return true;
tTJSVariantClosure &o1 = v1.AsObjectClosureNoAddRef();
tTJSVariantClosure &o2 = v2.AsObjectClosureNoAddRef();
// 関数どうしなら特別扱いで関数比較
if (o1.IsInstanceOf(0, NULL, NULL, L"Function", NULL)== TJS_S_TRUE
&& o2.IsInstanceOf(0, NULL, NULL, L"Function", NULL)== TJS_S_TRUE)
return v1.DiscernCompare(v2);
// Arrayどうしなら全項目を比較
if (o1.IsInstanceOf(0, NULL, NULL, L"Array", NULL)== TJS_S_TRUE
&& o2.IsInstanceOf(0, NULL, NULL, L"Array", NULL)== TJS_S_TRUE) {
// 長さが一致していなければ比較失敗
tTJSVariant o1Count, o2Count;
(void)o1.PropGet(0, L"count", &countHint, &o1Count, NULL);
(void)o2.PropGet(0, L"count", &countHint, &o2Count, NULL);
if (! o1Count.DiscernCompare(o2Count))
return false;
// 全項目を順番に比較
tjs_int count = o1Count;
tTJSVariant o1Val, o2Val;
for (tjs_int i = 0; i < count; i++) {
(void)o1.PropGetByNum(TJS_IGNOREPROP, i, &o1Val, NULL);
(void)o2.PropGetByNum(TJS_IGNOREPROP, i, &o2Val, NULL);
if (! equalStructNumericLoose(o1Val, o2Val))
return false;
}
return true;
}
// Dictionaryどうしなら全項目を比較
if (o1.IsInstanceOf(0, NULL, NULL, L"Dictionary", NULL)== TJS_S_TRUE
&& o2.IsInstanceOf(0, NULL, NULL, L"Dictionary", NULL)== TJS_S_TRUE) {
// 項目数が一致していなければ比較失敗
tjs_int o1Count, o2Count;
(void)o1.GetCount(&o1Count, NULL, NULL, NULL);
(void)o2.GetCount(&o2Count, NULL, NULL, NULL);
if (o1Count != o2Count)
return false;
// 全項目を順番に比較
DictMemberCompareNumericLooseCaller *caller = new DictMemberCompareNumericLooseCaller(o2);
tTJSVariantClosure closure(caller);
tTJSVariant(o1.EnumMembers(TJS_IGNOREPROP, &closure, NULL));
bool result = caller->match;
caller->Release();
return result;
}
}
// 数字の場合は
if ((v1.Type() == tvtInteger || v1.Type() == tvtReal)
&& (v2.Type() == tvtInteger || v2.Type() == tvtReal))
return v1.NormalCompare(v2);
return v1.DiscernCompare(v2);
}