diff --git a/src/corelib/text/qbytearrayview.h b/src/corelib/text/qbytearrayview.h index 85a68b14b2..90454f1c93 100644 --- a/src/corelib/text/qbytearrayview.h +++ b/src/corelib/text/qbytearrayview.h @@ -168,6 +168,9 @@ public: constexpr QByteArrayView(const char (&data)[Size]) noexcept : QByteArrayView(data, lengthHelperCharArray(data, Size)) {} + constexpr QByteArrayView(QLatin1StringView v) noexcept; // defined in qlatin1stringview.h + constexpr QByteArrayView(QUtf8StringView v) noexcept; // defined in qutf8stringview.h + #ifdef Q_QDOC template #else @@ -326,13 +329,13 @@ private: Q_ASSERT(n <= size() - pos); } - static inline bool + friend bool comparesEqual(const QByteArrayView &lhs, const QByteArrayView &rhs) noexcept { return lhs.size() == rhs.size() && (!lhs.size() || memcmp(lhs.data(), rhs.data(), lhs.size()) == 0); } - static inline Qt::strong_ordering + friend Qt::strong_ordering compareThreeWay(const QByteArrayView &lhs, const QByteArrayView &rhs) noexcept { const int res = QtPrivate::compareMemory(lhs, rhs); @@ -340,20 +343,22 @@ private: } Q_DECLARE_STRONGLY_ORDERED(QByteArrayView) - static inline bool comparesEqual(const QByteArrayView &lhs, const char *rhs) noexcept + friend bool comparesEqual(const QByteArrayView &lhs, const char *rhs) noexcept { return comparesEqual(lhs, QByteArrayView(rhs)); } - static inline Qt::strong_ordering + friend Qt::strong_ordering compareThreeWay(const QByteArrayView &lhs, const char *rhs) noexcept { return compareThreeWay(lhs, QByteArrayView(rhs)); } Q_DECLARE_STRONGLY_ORDERED(QByteArrayView, const char *) // defined in qstring.cpp - static bool + friend Q_CORE_EXPORT bool comparesEqual(const QByteArrayView &lhs, const QChar &rhs) noexcept; - static Qt::strong_ordering + friend Q_CORE_EXPORT 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; + friend Q_CORE_EXPORT bool + comparesEqual(const QByteArrayView &lhs, char16_t rhs) noexcept; + friend Q_CORE_EXPORT 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) diff --git a/src/corelib/text/qlatin1stringview.h b/src/corelib/text/qlatin1stringview.h index daff68d440..fd4f046971 100644 --- a/src/corelib/text/qlatin1stringview.h +++ b/src/corelib/text/qlatin1stringview.h @@ -330,6 +330,10 @@ Q_DECLARE_TYPEINFO(QLatin1StringView, Q_RELOCATABLE_TYPE); Q_DECLARE_TYPEINFO(QLatin1String, Q_RELOCATABLE_TYPE); #endif +constexpr QByteArrayView::QByteArrayView(QLatin1StringView v) noexcept + : QByteArrayView(v.data(), v.size()) +{} + namespace Qt { inline namespace Literals { inline namespace StringLiterals { diff --git a/src/corelib/text/qstring.cpp b/src/corelib/text/qstring.cpp index 716b5823fb..24aa41b1ab 100644 --- a/src/corelib/text/qstring.cpp +++ b/src/corelib/text/qstring.cpp @@ -6718,25 +6718,23 @@ int QString::compare_helper(const QChar *data1, qsizetype length1, const char *d \overload compare() */ -bool QByteArrayView::comparesEqual(const QByteArrayView &lhs, const QChar &rhs) noexcept +bool 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 +Qt::strong_ordering 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 +bool 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 +Qt::strong_ordering compareThreeWay(const QByteArrayView &lhs, char16_t rhs) noexcept { const int res = QtPrivate::compareStrings(QUtf8StringView(lhs), QStringView(&rhs, 1)); return Qt::compareThreeWay(res, 0); diff --git a/src/corelib/text/qutf8stringview.h b/src/corelib/text/qutf8stringview.h index 972473794e..fe105e283e 100644 --- a/src/corelib/text/qutf8stringview.h +++ b/src/corelib/text/qutf8stringview.h @@ -414,6 +414,10 @@ private: qsizetype m_size; }; +constexpr QByteArrayView::QByteArrayView(QUtf8StringView v) noexcept + : QByteArrayView(v.data(), v.size()) +{} + #ifdef Q_QDOC #undef QBasicUtf8StringView #else