optimize QString::toLower()/toUpper() for special cases, step 2
from now, QUnicodeTables::specialCaseMap[] starts with a placeholder; so, if somethingCaseSpecial is true, then somethingCaseDiff is always greater than 0 Change-Id: Ibb1870512836eee71b1521564c0745096c05b2f9 Merge-request: 70 Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@nokia.com> Reviewed-by: Olivier Reviewed-by: Olivier Goffart <ogoffart@woboq.com>
This commit is contained in:
parent
5f04962132
commit
9514138a5c
@ -4906,7 +4906,7 @@ QString QString::toLower() const
|
|||||||
} else {
|
} else {
|
||||||
prop = qGetProp(*p);
|
prop = qGetProp(*p);
|
||||||
}
|
}
|
||||||
if (prop->lowerCaseDiff || prop->lowerCaseSpecial) {
|
if (prop->lowerCaseDiff) {
|
||||||
if (QChar::isLowSurrogate(*p))
|
if (QChar::isLowSurrogate(*p))
|
||||||
--p; // safe; diff is 0 for surrogates
|
--p; // safe; diff is 0 for surrogates
|
||||||
QString s(d->size, Qt::Uninitialized);
|
QString s(d->size, Qt::Uninitialized);
|
||||||
@ -4967,7 +4967,7 @@ QString QString::toCaseFolded() const
|
|||||||
} else {
|
} else {
|
||||||
prop = qGetProp(*p);
|
prop = qGetProp(*p);
|
||||||
}
|
}
|
||||||
if (prop->caseFoldDiff || prop->caseFoldSpecial) {
|
if (prop->caseFoldDiff) {
|
||||||
if (QChar::isLowSurrogate(*p))
|
if (QChar::isLowSurrogate(*p))
|
||||||
--p; // safe; diff is 0 for surrogates
|
--p; // safe; diff is 0 for surrogates
|
||||||
QString s(d->size, Qt::Uninitialized);
|
QString s(d->size, Qt::Uninitialized);
|
||||||
@ -5028,7 +5028,7 @@ QString QString::toUpper() const
|
|||||||
} else {
|
} else {
|
||||||
prop = qGetProp(*p);
|
prop = qGetProp(*p);
|
||||||
}
|
}
|
||||||
if (prop->upperCaseDiff || prop->upperCaseSpecial) {
|
if (prop->upperCaseDiff) {
|
||||||
if (QChar::isLowSurrogate(*p))
|
if (QChar::isLowSurrogate(*p))
|
||||||
--p; // safe; diff is 0 for surrogates
|
--p; // safe; diff is 0 for surrogates
|
||||||
QString s(d->size, Qt::Uninitialized);
|
QString s(d->size, Qt::Uninitialized);
|
||||||
|
@ -476,7 +476,10 @@ static int appendToSpecialCaseMap(const QList<int> &map)
|
|||||||
utf16map.prepend(length);
|
utf16map.prepend(length);
|
||||||
specialCaseMaxLen = qMax(specialCaseMaxLen, length);
|
specialCaseMaxLen = qMax(specialCaseMaxLen, length);
|
||||||
|
|
||||||
int i = 0;
|
if (specialCaseMap.isEmpty())
|
||||||
|
specialCaseMap << 0; // placeholder
|
||||||
|
|
||||||
|
int i = 1;
|
||||||
while (i < specialCaseMap.size()) {
|
while (i < specialCaseMap.size()) {
|
||||||
int n = specialCaseMap.at(i);
|
int n = specialCaseMap.at(i);
|
||||||
if (n == length) {
|
if (n == length) {
|
||||||
@ -2251,8 +2254,9 @@ static QByteArray createPropertyInfo()
|
|||||||
"}\n\n";
|
"}\n\n";
|
||||||
|
|
||||||
|
|
||||||
out += "static const ushort specialCaseMap[] = {";
|
out += "static const ushort specialCaseMap[] = {\n";
|
||||||
int i = 0;
|
out += " 0x0, // placeholder";
|
||||||
|
int i = 1;
|
||||||
while (i < specialCaseMap.size()) {
|
while (i < specialCaseMap.size()) {
|
||||||
out += "\n ";
|
out += "\n ";
|
||||||
int n = specialCaseMap.at(i);
|
int n = specialCaseMap.at(i);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user