From a08bafc9205d0b67f71a1896ad84272eeb294374 Mon Sep 17 00:00:00 2001 From: Ivan Solovev Date: Tue, 20 Feb 2024 16:45:21 +0100 Subject: [PATCH] Add QByteArrayView vs QChar and vs char16_t relational operators This allows to remove the dummy relational operators from tst_qstringapisymmetry. Task-number: QTBUG-108805 Change-Id: I7cb3154d6fcb571cafab6b318806f74bc8300448 Reviewed-by: Thiago Macieira --- src/corelib/text/qbytearrayview.h | 12 ++++++++++ src/corelib/text/qstring.cpp | 24 +++++++++++++++++++ .../tst_qstringapisymmetry.cpp | 4 ---- 3 files changed, 36 insertions(+), 4 deletions(-) diff --git a/src/corelib/text/qbytearrayview.h b/src/corelib/text/qbytearrayview.h index 92c38e5ed4..85a68b14b2 100644 --- a/src/corelib/text/qbytearrayview.h +++ b/src/corelib/text/qbytearrayview.h @@ -347,6 +347,18 @@ private: { return compareThreeWay(lhs, QByteArrayView(rhs)); } Q_DECLARE_STRONGLY_ORDERED(QByteArrayView, const char *) + // defined in qstring.cpp + static bool + comparesEqual(const QByteArrayView &lhs, const QChar &rhs) noexcept; + static Qt::strong_ordering + compareThreeWay(const QByteArrayView &lhs, const QChar &rhs) noexcept; + static bool comparesEqual(const QByteArrayView &lhs, char16_t rhs) noexcept; + static Qt::strong_ordering compareThreeWay(const QByteArrayView &lhs, char16_t rhs) noexcept; +#if !defined(QT_NO_CAST_FROM_ASCII) && !defined(QT_RESTRICTED_CAST_FROM_ASCII) + Q_DECLARE_STRONGLY_ORDERED(QByteArrayView, QChar, QT_ASCII_CAST_WARN) + Q_DECLARE_STRONGLY_ORDERED(QByteArrayView, char16_t, QT_ASCII_CAST_WARN) +#endif // !defined(QT_NO_CAST_FROM_ASCII) && !defined(QT_RESTRICTED_CAST_FROM_ASCII) + qsizetype m_size; const storage_type *m_data; }; diff --git a/src/corelib/text/qstring.cpp b/src/corelib/text/qstring.cpp index dba6f6b298..28417a304e 100644 --- a/src/corelib/text/qstring.cpp +++ b/src/corelib/text/qstring.cpp @@ -6707,6 +6707,30 @@ int QString::compare_helper(const QChar *data1, qsizetype length1, const char *d \overload compare() */ +bool QByteArrayView::comparesEqual(const QByteArrayView &lhs, const QChar &rhs) noexcept +{ + return QtPrivate::equalStrings(QUtf8StringView(lhs), QStringView(&rhs, 1)); +} + +Qt::strong_ordering QByteArrayView::compareThreeWay(const QByteArrayView &lhs, + const QChar &rhs) noexcept +{ + const int res = QtPrivate::compareStrings(QUtf8StringView(lhs), QStringView(&rhs, 1)); + return Qt::compareThreeWay(res, 0); +} + +bool QByteArrayView::comparesEqual(const QByteArrayView &lhs, char16_t rhs) noexcept +{ + return QtPrivate::equalStrings(QUtf8StringView(lhs), QStringView(&rhs, 1)); +} + +Qt::strong_ordering QByteArrayView::compareThreeWay(const QByteArrayView &lhs, + char16_t rhs) noexcept +{ + const int res = QtPrivate::compareStrings(QUtf8StringView(lhs), QStringView(&rhs, 1)); + return Qt::compareThreeWay(res, 0); +} + /*! \internal \since 6.8 diff --git a/tests/auto/corelib/text/qstringapisymmetry/tst_qstringapisymmetry.cpp b/tests/auto/corelib/text/qstringapisymmetry/tst_qstringapisymmetry.cpp index a007d47fd9..854d0ac991 100644 --- a/tests/auto/corelib/text/qstringapisymmetry/tst_qstringapisymmetry.cpp +++ b/tests/auto/corelib/text/qstringapisymmetry/tst_qstringapisymmetry.cpp @@ -60,13 +60,9 @@ constexpr bool is_fake_comparator_v = false; MAKE_RELOP(>=, A1, A2) \ /*end*/ -MAKE_ALL(QByteArray, QChar) -MAKE_ALL(QByteArray, char16_t) -MAKE_ALL(char16_t, QByteArray) MAKE_ALL(const char*, QChar) -MAKE_ALL(QChar, QByteArray) MAKE_ALL(QChar, const char*) #undef MAKE_ALL