From adac22f290f1780f6d1424d6f93cc4453d4d489c Mon Sep 17 00:00:00 2001 From: Patrick Lam Date: Tue, 22 Nov 2005 04:46:55 +0000 Subject: [PATCH] Manually perform inlining & partial redundancy elimination to reduce calls to FcValueListPtrU. Only invoke strlen() when really necessary. reviewed by: plam reviewed by: plam --- ChangeLog | 16 ++++++++++++++++ src/fcmatch.c | 17 +++++++++-------- src/fcstr.c | 8 ++------ 3 files changed, 27 insertions(+), 14 deletions(-) diff --git a/ChangeLog b/ChangeLog index e5796a4..952f987 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,19 @@ +2005-11-21 Dirk Mueller + reviewed by: plam + + * src/fcmatch.c (FcCompareValueList): + + Manually perform inlining & partial redundancy elimination to + reduce calls to FcValueListPtrU. + +2005-11-21 Dirk Mueller + reviewed by: plam + + * src/fcstr.c (FcStrFree, FcStrCaseWalkerInit, FcStrCaseWalkerLong, + FcStrCaseWalkerNext, FcStrCaseWalkerNextIgnoreBlanks): + + Only invoke strlen() when really necessary. + 2005-11-19 Matthias Clasen reviewed by: plam diff --git a/src/fcmatch.c b/src/fcmatch.c index 38d083e..49d41a4 100644 --- a/src/fcmatch.c +++ b/src/fcmatch.c @@ -254,7 +254,8 @@ FcCompareValueList (const char *object, double *value, FcResult *result) { - FcValueListPtr v1, v2; + FcValueListPtr v1, v2; + FcValueList *v1_ptrU, *v2_ptrU; double v, best, bestStrong, bestWeak; int i; int j; @@ -336,15 +337,15 @@ FcCompareValueList (const char *object, bestStrong = 1e99; bestWeak = 1e99; j = 0; - for (v1 = v1orig; FcValueListPtrU(v1); - v1 = FcValueListPtrU(v1)->next) + for (v1 = v1orig, v1_ptrU = FcValueListPtrU(v1); v1_ptrU; + v1 = FcValueListPtrU(v1)->next, v1_ptrU = FcValueListPtrU(v1)) { - for (v2 = v2orig; FcValueListPtrU(v2); + for (v2 = v2orig, v2_ptrU = FcValueListPtrU(v2); FcValueListPtrU(v2); v2 = FcValueListPtrU(v2)->next) { v = (*_FcMatchers[i].compare) (_FcMatchers[i].object, - &FcValueListPtrU(v1)->value, - &FcValueListPtrU(v2)->value); + &v1_ptrU->value, + &v2_ptrU->value); if (v < 0) { *result = FcResultTypeMismatch; @@ -356,10 +357,10 @@ FcCompareValueList (const char *object, if (v < best) { if (bestValue) - *bestValue = FcValueCanonicalize(&FcValueListPtrU(v2)->value); + *bestValue = FcValueCanonicalize(&v2_ptrU->value); best = v; } - if (FcValueListPtrU(v1)->binding == FcValueBindingStrong) + if (v1_ptrU->binding == FcValueBindingStrong) { if (v < bestStrong) bestStrong = v; diff --git a/src/fcstr.c b/src/fcstr.c index fb715a4..b60c082 100644 --- a/src/fcstr.c +++ b/src/fcstr.c @@ -74,7 +74,6 @@ FcStrFree (FcChar8 *s) typedef struct _FcCaseWalker { const FcChar8 *read; const FcChar8 *src; - int len; FcChar8 utf8[FC_MAX_CASE_FOLD_CHARS + 1]; } FcCaseWalker; @@ -83,7 +82,6 @@ FcStrCaseWalkerInit (const FcChar8 *src, FcCaseWalker *w) { w->src = src; w->read = 0; - w->len = strlen ((char *) src); } static FcChar8 @@ -91,8 +89,9 @@ FcStrCaseWalkerLong (FcCaseWalker *w, FcChar8 r) { FcChar32 ucs4; int slen; + int len = strlen((char*)w->src); - slen = FcUtf8ToUcs4 (w->src - 1, &ucs4, w->len + 1); + slen = FcUtf8ToUcs4 (w->src - 1, &ucs4, len + 1); if (slen <= 0) return r; if (FC_MIN_FOLD_CHAR <= ucs4 && ucs4 <= FC_MAX_FOLD_CHAR) @@ -131,7 +130,6 @@ FcStrCaseWalkerLong (FcCaseWalker *w, FcChar8 r) /* consume rest of src utf-8 bytes */ w->src += slen - 1; - w->len -= slen - 1; /* read from temp buffer */ w->utf8[dlen] = '\0'; @@ -155,7 +153,6 @@ FcStrCaseWalkerNext (FcCaseWalker *w) w->read = 0; } r = *w->src++; - --w->len; if ((r & 0xc0) == 0xc0) return FcStrCaseWalkerLong (w, r); @@ -178,7 +175,6 @@ FcStrCaseWalkerNextIgnoreBlanks (FcCaseWalker *w) do { r = *w->src++; - --w->len; } while (r == ' '); if ((r & 0xc0) == 0xc0)