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 <thiago.macieira@intel.com>
bb10
Ivan Solovev 2024-02-20 16:45:21 +01:00
parent 34372af708
commit a08bafc920
3 changed files with 36 additions and 4 deletions

View File

@ -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;
};

View File

@ -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

View File

@ -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