1
0
mirror of https://invent.kde.org/system/dolphin synced 2024-07-04 17:30:55 +00:00

Minor performance improvement. As Dominic Battre pointed out correctly, it is not necessary to calculate the value of both numbers, it is enough to compare the weight.

svn path=/trunk/playground/utils/dolphin/; revision=623878
This commit is contained in:
Peter Penz 2007-01-15 18:28:19 +00:00
parent e28a32728b
commit d7b618e4bb

View File

@ -184,16 +184,13 @@ int DolphinSortFilterProxyModel::naturalCompare(const QString& a,
//
// The longest run of digits wins. That aside, the greatest
// value wins, but we can't know that it will until we've scanned
// both numbers to know that they have the same magnitude, so we
// remember the values in 'valueA' and 'valueB'.
int valueA = 0;
int valueB = 0;
// both numbers to know that they have the same magnitude.
int weight = 0;
while (1) {
if (!currA->isDigit() && !currB->isDigit()) {
if (valueA != valueB) {
return valueA - valueB;
if (weight != 0) {
return weight;
}
break;
}
@ -203,11 +200,12 @@ int DolphinSortFilterProxyModel::naturalCompare(const QString& a,
else if (!currB->isDigit()) {
return +1;
}
else {
valueA = (valueA * 10) + currA->digitValue();
valueB = (valueB * 10) + currB->digitValue();
else if ((*currA < *currB) && (weight == 0)) {
weight = -1;
}
else if ((*currA > *currB) && (weight == 0)) {
weight = +1;
}
++currA;
++currB;
}