make QStringList::sort() to take a Qt::CaseSensitivity param

Task-number: QTBUG-12892

Change-Id: I402e6fb12ff24ac26c5a8103bf81547946f9cc58
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@nokia.com>
Reviewed-by: Lars Knoll <lars.knoll@nokia.com>
This commit is contained in:
Konstantin Ritt 2012-04-11 18:06:11 +03:00 committed by Qt by Nokia
parent 3127f23e3a
commit 1035c93245
3 changed files with 39 additions and 8 deletions

View File

@ -213,9 +213,11 @@ QT_BEGIN_NAMESPACE
*/ */
/*! /*!
\fn void QStringList::sort() \fn void QStringList::sort(Qt::CaseSensitivity cs)
Sorts the list of strings in ascending order (case sensitively). Sorts the list of strings in ascending order.
If \a cs is \l Qt::CaseSensitive (the default), the string comparison
is case sensitive; otherwise the comparison is case insensitive.
Sorting is performed using Qt's qSort() algorithm, Sorting is performed using Qt's qSort() algorithm,
which operates in \l{linear-logarithmic time}, i.e. O(\e{n} log \e{n}). which operates in \l{linear-logarithmic time}, i.e. O(\e{n} log \e{n}).
@ -229,9 +231,18 @@ QT_BEGIN_NAMESPACE
\sa qSort() \sa qSort()
*/ */
void QtPrivate::QStringList_sort(QStringList *that)
static inline bool caseInsensitiveLessThan(const QString &s1, const QString &s2)
{ {
qSort(*that); return s1.compare(s2, Qt::CaseInsensitive) < 0;
}
void QtPrivate::QStringList_sort(QStringList *that, Qt::CaseSensitivity cs)
{
if (cs == Qt::CaseSensitive)
qSort(that->begin(), that->end());
else
qSort(that->begin(), that->end(), caseInsensitiveLessThan);
} }

View File

@ -71,7 +71,7 @@ public:
inline QStringList(std::initializer_list<QString> args) : QList<QString>(args) { } inline QStringList(std::initializer_list<QString> args) : QList<QString>(args) { }
#endif #endif
inline void sort(); inline void sort(Qt::CaseSensitivity cs = Qt::CaseSensitive);
inline int removeDuplicates(); inline int removeDuplicates();
inline QString join(const QString &sep) const; inline QString join(const QString &sep) const;
@ -120,7 +120,7 @@ public:
Q_DECLARE_TYPEINFO(QStringList, Q_MOVABLE_TYPE); Q_DECLARE_TYPEINFO(QStringList, Q_MOVABLE_TYPE);
namespace QtPrivate { namespace QtPrivate {
void Q_CORE_EXPORT QStringList_sort(QStringList *that); void Q_CORE_EXPORT QStringList_sort(QStringList *that, Qt::CaseSensitivity cs);
int Q_CORE_EXPORT QStringList_removeDuplicates(QStringList *that); int Q_CORE_EXPORT QStringList_removeDuplicates(QStringList *that);
QString Q_CORE_EXPORT QStringList_join(const QStringList *that, const QString &sep); QString Q_CORE_EXPORT QStringList_join(const QStringList *that, const QString &sep);
QStringList Q_CORE_EXPORT QStringList_filter(const QStringList *that, const QString &str, QStringList Q_CORE_EXPORT QStringList_filter(const QStringList *that, const QString &str,
@ -149,9 +149,9 @@ namespace QtPrivate {
#endif // QT_BOOTSTRAPPED #endif // QT_BOOTSTRAPPED
} }
inline void QStringList::sort() inline void QStringList::sort(Qt::CaseSensitivity cs)
{ {
QtPrivate::QStringList_sort(this); QtPrivate::QStringList_sort(this, cs);
} }
inline int QStringList::removeDuplicates() inline int QStringList::removeDuplicates()

View File

@ -44,10 +44,13 @@
#include <qregularexpression.h> #include <qregularexpression.h>
#include <qstringlist.h> #include <qstringlist.h>
#include <locale.h>
class tst_QStringList : public QObject class tst_QStringList : public QObject
{ {
Q_OBJECT Q_OBJECT
private slots: private slots:
void sort();
void filter(); void filter();
void replaceInStrings(); void replaceInStrings();
void removeDuplicates(); void removeDuplicates();
@ -199,6 +202,23 @@ void tst_QStringList::filter()
QCOMPARE( list5, list6 ); QCOMPARE( list5, list6 );
} }
void tst_QStringList::sort()
{
QStringList list1, list2;
list1 << "alpha" << "beta" << "BETA" << "gamma" << "Gamma" << "gAmma" << "epsilon";
list1.sort();
list2 << "BETA" << "Gamma" << "alpha" << "beta" << "epsilon" << "gAmma" << "gamma";
QCOMPARE( list1, list2 );
char *current_locale = setlocale(LC_ALL, "C");
QStringList list3, list4;
list3 << "alpha" << "beta" << "BETA" << "gamma" << "Gamma" << "gAmma" << "epsilon";
list3.sort(Qt::CaseInsensitive);
list4 << "alpha" << "beta" << "BETA" << "epsilon" << "Gamma" << "gAmma" << "gamma";
QCOMPARE( list3, list4 );
setlocale(LC_ALL, current_locale);
}
void tst_QStringList::replaceInStrings() void tst_QStringList::replaceInStrings()
{ {
QStringList list1, list2; QStringList list1, list2;