Speed up FcCompareLang and FcCompareBool

Avoid FcCanonicalize here too.
This commit is contained in:
Matthias Clasen 2020-08-21 09:12:35 -04:00
parent 09729c9032
commit 7deb07e38e
1 changed files with 10 additions and 12 deletions

View File

@ -104,30 +104,27 @@ static double
FcCompareLang (const FcValue *v1, const FcValue *v2, FcValue *bestValue) FcCompareLang (const FcValue *v1, const FcValue *v2, FcValue *bestValue)
{ {
FcLangResult result; FcLangResult result;
FcValue value1 = FcValueCanonicalize(v1), value2 = FcValueCanonicalize(v2);
switch ((int) value1.type) { switch ((int) v1->type) {
case FcTypeLangSet: case FcTypeLangSet:
switch ((int) value2.type) { switch ((int) v2->type) {
case FcTypeLangSet: case FcTypeLangSet:
result = FcLangSetCompare (value1.u.l, value2.u.l); result = FcLangSetCompare (FcValueLangSet (v1), FcValueLangSet (v2));
break; break;
case FcTypeString: case FcTypeString:
result = FcLangSetHasLang (value1.u.l, result = FcLangSetHasLang (FcValueLangSet (v1), FcValueString (v2));
value2.u.s);
break; break;
default: default:
return -1.0; return -1.0;
} }
break; break;
case FcTypeString: case FcTypeString:
switch ((int) value2.type) { switch ((int) v2->type) {
case FcTypeLangSet: case FcTypeLangSet:
result = FcLangSetHasLang (value2.u.l, value1.u.s); result = FcLangSetHasLang (FcValueLangSet (v2), FcValueString (v1));
break; break;
case FcTypeString: case FcTypeString:
result = FcLangCompare (value1.u.s, result = FcLangCompare (FcValueString (v1), FcValueString (v2));
value2.u.s);
break; break;
default: default:
return -1.0; return -1.0;
@ -154,10 +151,11 @@ FcCompareBool (const FcValue *v1, const FcValue *v2, FcValue *bestValue)
if (v2->type != FcTypeBool || v1->type != FcTypeBool) if (v2->type != FcTypeBool || v1->type != FcTypeBool)
return -1.0; return -1.0;
bestValue->type = FcTypeBool;
if (v2->u.b != FcDontCare) if (v2->u.b != FcDontCare)
*bestValue = FcValueCanonicalize (v2); bestValue->u.b = v2->u.b;
else else
*bestValue = FcValueCanonicalize (v1); bestValue->u.b = v1->u.b;
return (double) ((v2->u.b ^ v1->u.b) == 1); return (double) ((v2->u.b ^ v1->u.b) == 1);
} }