Do not create a new QCollator every time we compare a string

This commit is contained in:
luisangelsm
2025-11-19 18:09:10 +01:00
parent 7ee7684900
commit 14ad6f3a2d

View File

@ -2,12 +2,25 @@
#include <QCollator> #include <QCollator>
int naturalCompare(const QString &s1, const QString &s2, Qt::CaseSensitivity caseSensitivity) static QCollator collatorCI = [] {
{
QCollator c; QCollator c;
c.setCaseSensitivity(caseSensitivity);
c.setNumericMode(true); c.setNumericMode(true);
c.setIgnorePunctuation(false); c.setIgnorePunctuation(false);
c.setCaseSensitivity(Qt::CaseInsensitive);
return c;
}();
static QCollator collatorCS = [] {
QCollator c;
c.setNumericMode(true);
c.setIgnorePunctuation(false);
c.setCaseSensitivity(Qt::CaseSensitive);
return c;
}();
int naturalCompare(const QString &s1, const QString &s2, Qt::CaseSensitivity caseSensitivity)
{
QCollator &c = (caseSensitivity == Qt::CaseSensitive) ? collatorCS : collatorCI;
return c.compare(s1, s2); return c.compare(s1, s2);
} }
bool naturalSortLessThanCS(const QString &left, const QString &right) bool naturalSortLessThanCS(const QString &left, const QString &right)