From 019dd88d2cf63ff065bfd801876b213e8193c60f Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Wed, 11 Jul 2018 12:59:30 +0200 Subject: QStringView: Add compare() member function There was no public API for doing case-insensitive comparisons of QStringView. Task-number: QTBUG-69389 Change-Id: I1b021eefec35e135b97fb87704c8dc137232d83d Reviewed-by: Edward Welbourne Reviewed-by: Thiago Macieira --- src/corelib/tools/qstringview.cpp | 14 ++++++++++++++ src/corelib/tools/qstringview.h | 3 +++ .../corelib/tools/qstringview/tst_qstringview.cpp | 20 ++++++++++++++++++++ 3 files changed, 37 insertions(+) diff --git a/src/corelib/tools/qstringview.cpp b/src/corelib/tools/qstringview.cpp index 0e3246c72c..ce8fdacafb 100644 --- a/src/corelib/tools/qstringview.cpp +++ b/src/corelib/tools/qstringview.cpp @@ -680,6 +680,20 @@ QT_BEGIN_NAMESPACE '\\f', '\\r', and ' '. */ +/*! + \fn int QStringView::compare(QStringView other, Qt::CaseSensitivity cs) const + \since 5.12 + + Compares this string-view with the \a other string-view and returns an + integer less than, equal to, or greater than zero if this string-view + is less than, equal to, or greater than the other string-view. + + If \a cs is Qt::CaseSensitive, the comparison is case sensitive; + otherwise the comparison is case insensitive. + + \sa operator==(), operator<(), operator>() +*/ + /*! \fn bool QStringView::startsWith(QStringView str, Qt::CaseSensitivity cs) const \fn bool QStringView::startsWith(QLatin1String l1, Qt::CaseSensitivity cs) const diff --git a/src/corelib/tools/qstringview.h b/src/corelib/tools/qstringview.h index 4f7d48fe1d..2e95c2b218 100644 --- a/src/corelib/tools/qstringview.h +++ b/src/corelib/tools/qstringview.h @@ -250,6 +250,9 @@ public: Q_REQUIRED_RESULT QStringView trimmed() const Q_DECL_NOTHROW { return QtPrivate::trimmed(*this); } + Q_REQUIRED_RESULT int compare(QStringView other, Qt::CaseSensitivity cs = Qt::CaseSensitive) const Q_DECL_NOTHROW + { return QtPrivate::compareStrings(*this, other, cs); } + Q_REQUIRED_RESULT bool startsWith(QStringView s, Qt::CaseSensitivity cs = Qt::CaseSensitive) const Q_DECL_NOTHROW { return QtPrivate::startsWith(*this, s, cs); } Q_REQUIRED_RESULT inline bool startsWith(QLatin1String s, Qt::CaseSensitivity cs = Qt::CaseSensitive) const Q_DECL_NOTHROW; diff --git a/tests/auto/corelib/tools/qstringview/tst_qstringview.cpp b/tests/auto/corelib/tools/qstringview/tst_qstringview.cpp index 4ae96005d0..e800a0d794 100644 --- a/tests/auto/corelib/tools/qstringview/tst_qstringview.cpp +++ b/tests/auto/corelib/tools/qstringview/tst_qstringview.cpp @@ -217,6 +217,8 @@ private Q_SLOTS: #endif } + void comparison(); + private: template void conversion_tests(String arg) const; @@ -615,5 +617,23 @@ void tst_QStringView::conversion_tests(String string) const } } +void tst_QStringView::comparison() +{ + const QStringView aa = QStringViewLiteral("aa"); + const QStringView upperAa = QStringViewLiteral("AA"); + const QStringView bb = QStringViewLiteral("bb"); + + QVERIFY(aa == aa); + QVERIFY(aa != bb); + QVERIFY(aa < bb); + QVERIFY(bb > aa); + + QCOMPARE(aa.compare(aa), 0); + QVERIFY(aa.compare(upperAa) != 0); + QCOMPARE(aa.compare(upperAa, Qt::CaseInsensitive), 0); + QVERIFY(aa.compare(bb) < 0); + QVERIFY(bb.compare(aa) > 0); +} + QTEST_APPLESS_MAIN(tst_QStringView) #include "tst_qstringview.moc" -- cgit v1.2.3