summaryrefslogtreecommitdiffstats
path: root/src/corelib/text/qstringview.h
diff options
context:
space:
mode:
authorIvan Solovev <ivan.solovev@qt.io>2024-02-15 13:19:29 +0100
committerIvan Solovev <ivan.solovev@qt.io>2024-02-20 01:04:33 +0100
commit4832426d1b22099cbdacaede17a4fd50336b9ae3 (patch)
treec0af70c22ce540ef7775b4c1a4c1f839b9a67fb9 /src/corelib/text/qstringview.h
parentfb50ab700600cbcdf21e5d06321f357eae4303bb (diff)
Add QStringView vs byte array relational operators
... by using the new comparison helper macors. Note that by providing helper functions for QByteArrayView, we can support all three types: QByteArray, QByteArrayView, and const char *. Use the regular QT_NO_CAST_FROM_ASCII and QT_RESTRICTED_CAST_FROM_ASCII guards to disable the operators if the cast from ASCII is forbidden. Also use QT_ASCII_CAST_WARN on each operator. This allows to enable related tests in tst_qstringapisymmetry. Task-number: QTBUG-117661 Task-number: QTBUG-108805 Change-Id: I0d77c30245d8b5ac4b8cfd98d650c1885aca2005 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Diffstat (limited to 'src/corelib/text/qstringview.h')
-rw-r--r--src/corelib/text/qstringview.h18
1 files changed, 18 insertions, 0 deletions
diff --git a/src/corelib/text/qstringview.h b/src/corelib/text/qstringview.h
index 57ae1fe869..2e099a9ba5 100644
--- a/src/corelib/text/qstringview.h
+++ b/src/corelib/text/qstringview.h
@@ -5,6 +5,7 @@
#define QSTRINGVIEW_H
#include <QtCore/qchar.h>
+#include <QtCore/qcompare.h>
#include <QtCore/qbytearray.h>
#include <QtCore/qstringliteral.h>
#include <QtCore/qstringalgorithms.h>
@@ -431,6 +432,23 @@ private:
constexpr int compare_single_char_helper(int diff) const noexcept
{ return diff ? diff : size() > 1 ? 1 : 0; }
+
+ Q_CORE_EXPORT static bool equal_helper(QStringView sv, const char *data, qsizetype len);
+ Q_CORE_EXPORT static int compare_helper(QStringView sv, const char *data, qsizetype len);
+
+#if !defined(QT_NO_CAST_FROM_ASCII) && !defined(QT_RESTRICTED_CAST_FROM_ASCII)
+ friend bool comparesEqual(const QStringView &lhs, const QByteArrayView &rhs) noexcept
+ { return equal_helper(lhs, rhs.data(), rhs.size()); }
+ friend Qt::strong_ordering
+ compareThreeWay(const QStringView &lhs, const QByteArrayView &rhs) noexcept
+ {
+ const int res = compare_helper(lhs, rhs.data(), rhs.size());
+ return Qt::compareThreeWay(res, 0);
+ }
+ Q_DECLARE_STRONGLY_ORDERED(QStringView, QByteArrayView, QT_ASCII_CAST_WARN)
+ Q_DECLARE_STRONGLY_ORDERED(QStringView, QByteArray, QT_ASCII_CAST_WARN)
+ Q_DECLARE_STRONGLY_ORDERED(QStringView, const char *, QT_ASCII_CAST_WARN)
+#endif // !defined(QT_NO_CAST_FROM_ASCII) && !defined(QT_RESTRICTED_CAST_FROM_ASCII)
};
Q_DECLARE_TYPEINFO(QStringView, Q_PRIMITIVE_TYPE);