diff options
author | Konstantin Ritt <ritt.ks@gmail.com> | 2011-10-18 19:12:20 +0200 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2012-02-21 22:31:00 +0100 |
commit | 5f049621326bd0236713263c71b0a78f8e7dff3f (patch) | |
tree | 25b5b6d11b8af5e4e0bae4cae137ab5d20b5adc4 /src/corelib/tools/qstring.cpp | |
parent | 20faf6408ac193b0bf11acd806f3b2eb52135b5d (diff) |
optimize QString::toLower()/toUpper() for special cases, step 1
reorganize QUnicodeTables::specialCaseMap as follows:
specialCaseMap contains sequence entries in form { length, a, b, .. }
Change-Id: Iea1f80bc2f4dc1f505428dad981cde26daaa52c7
Merge-request: 70
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@nokia.com>
Reviewed-by: Olivier
Reviewed-by: Olivier Goffart <ogoffart@woboq.com>
Diffstat (limited to 'src/corelib/tools/qstring.cpp')
-rw-r--r-- | src/corelib/tools/qstring.cpp | 16 |
1 files changed, 8 insertions, 8 deletions
diff --git a/src/corelib/tools/qstring.cpp b/src/corelib/tools/qstring.cpp index 5bb8d5a5a1..b0c259272e 100644 --- a/src/corelib/tools/qstring.cpp +++ b/src/corelib/tools/qstring.cpp @@ -4920,11 +4920,12 @@ QString QString::toLower() const prop = qGetProp(*p); } if (prop->lowerCaseSpecial) { + const ushort *specialCase = specialCaseMap + prop->lowerCaseDiff; + ushort length = *specialCase++; int pos = pp - s.d->data(); - s.resize(s.d->size + SPECIAL_CASE_MAX_LEN); + s.resize(s.d->size + length - 1); pp = s.d->data() + pos; - const ushort *specialCase = specialCaseMap + prop->lowerCaseDiff; - while (*specialCase) + while (length--) *pp++ = *specialCase++; } else { *pp++ = *p + prop->lowerCaseDiff; @@ -4936,7 +4937,6 @@ QString QString::toLower() const while (e != d->data() + d->size) *pp++ = *e++; - s.truncate(pp - s.d->data()); return s; } ++p; @@ -5042,11 +5042,12 @@ QString QString::toUpper() const prop = qGetProp(*p); } if (prop->upperCaseSpecial) { + const ushort *specialCase = specialCaseMap + prop->upperCaseDiff; + ushort length = *specialCase++; int pos = pp - s.d->data(); - s.resize(s.d->size + SPECIAL_CASE_MAX_LEN); + s.resize(s.d->size + length - 1); pp = s.d->data() + pos; - const ushort *specialCase = specialCaseMap + prop->upperCaseDiff; - while (*specialCase) + while (length--) *pp++ = *specialCase++; } else { *pp++ = *p + prop->upperCaseDiff; @@ -5058,7 +5059,6 @@ QString QString::toUpper() const while (e != d->data() + d->size) *pp++ = *e++; - s.truncate(pp - s.d->data()); return s; } ++p; |