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:
parent
e28a32728b
commit
d7b618e4bb
|
@ -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;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user