Commit f2bc9c0f authored by Peter Penz's avatar Peter Penz
Browse files

Minor performance improvement. As Dominic Battre pointed out correctly, it is...

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
parent a1fe0824
......@@ -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;
}
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment