diff --git a/src/corelib/text/qstring.h b/src/corelib/text/qstring.h index 9fc9462fade..cc3fcac01cf 100644 --- a/src/corelib/text/qstring.h +++ b/src/corelib/text/qstring.h @@ -121,17 +121,11 @@ public: { return QtPrivate::compareStrings(*this, other, cs); } [[nodiscard]] int compare(QLatin1StringView other, Qt::CaseSensitivity cs = Qt::CaseSensitive) const noexcept { return QtPrivate::compareStrings(*this, other, cs); } + [[nodiscard]] inline int compare(QUtf8StringView other, Qt::CaseSensitivity cs = Qt::CaseSensitive) const noexcept; [[nodiscard]] constexpr int compare(QChar c) const noexcept { return isEmpty() ? -1 : front() == c ? int(size() > 1) : uchar(m_data[0]) - c.unicode(); } [[nodiscard]] int compare(QChar c, Qt::CaseSensitivity cs) const noexcept { return QtPrivate::compareStrings(*this, QStringView(&c, 1), cs); } - template - [[nodiscard]] int compare(QBasicUtf8StringView other, - Qt::CaseSensitivity cs = Qt::CaseSensitive) const noexcept - { - return QtPrivate::compareStrings(*this, other, cs); - } - [[nodiscard]] bool startsWith(QStringView s, Qt::CaseSensitivity cs = Qt::CaseSensitive) const noexcept { return QtPrivate::startsWith(*this, s, cs); } [[nodiscard]] bool startsWith(QLatin1StringView s, Qt::CaseSensitivity cs = Qt::CaseSensitive) const noexcept @@ -1219,12 +1213,26 @@ public: inline const DataPointer &data_ptr() const { return d; } }; +// +// QLatin1StringView inline members that require QUtf8StringView: +// + +int QLatin1StringView::compare(QUtf8StringView other, Qt::CaseSensitivity cs) const noexcept +{ return QtPrivate::compareStrings(*this, other, cs); } + // // QLatin1StringView inline members that require QString: // QString QLatin1StringView::toString() const { return *this; } +// +// QStringView inline members that require QUtf8StringView: +// + +int QStringView::compare(QUtf8StringView other, Qt::CaseSensitivity cs) const noexcept +{ return QtPrivate::compareStrings(*this, other, cs); } + // // QStringView inline members that require QString: // @@ -1249,6 +1257,17 @@ short QStringView::toShort(bool *ok, int base) const ushort QStringView::toUShort(bool *ok, int base) const { return QString::toIntegral_helper(*this, ok, base); } +// +// QUtf8StringView inline members that require QStringView: +// + +template +int QBasicUtf8StringView::compare(QStringView other, Qt::CaseSensitivity cs) const noexcept +{ + return QtPrivate::compareStrings(*this, other, cs); +} + + // // QUtf8StringView inline members that require QString: // diff --git a/src/corelib/text/qstringview.cpp b/src/corelib/text/qstringview.cpp index a4d9ac62e8f..6b6168924fa 100644 --- a/src/corelib/text/qstringview.cpp +++ b/src/corelib/text/qstringview.cpp @@ -732,6 +732,18 @@ QT_BEGIN_NAMESPACE \sa operator==(), operator<(), operator>() */ +/*! + \fn int QStringView::compare(QUtf8StringView str, Qt::CaseSensitivity cs) const + \since 6.5 + + Returns an integer that compares to zero as this string view compares to the + string view \a str. + + \include qstring.qdocinc {search-comparison-case-sensitivity} {comparison} + + \sa operator==(), operator<(), operator>() +*/ + /*! \fn int QStringView::compare(QLatin1StringView l1, Qt::CaseSensitivity cs) const \fn int QStringView::compare(QChar ch) const @@ -1357,6 +1369,17 @@ or the character \a ch \since 6.0 */ +/*! + \fn int QLatin1StringView::compare(QUtf8StringView str, Qt::CaseSensitivity cs) const + \since 6.5 + + Returns an integer that compares to zero as this string view compares to the + string view \a str. + + \include qstring.qdocinc {search-comparison-case-sensitivity} {comparison} + + \sa operator==(), operator<(), operator>() +*/ /*! \fn template auto QStringView::tokenize(Needle &&sep, Flags...flags) const diff --git a/src/corelib/text/qstringview.h b/src/corelib/text/qstringview.h index 20b61f18655..3dc8b5ce0b1 100644 --- a/src/corelib/text/qstringview.h +++ b/src/corelib/text/qstringview.h @@ -8,7 +8,6 @@ #include #include #include -#include #include #include @@ -24,6 +23,9 @@ class QString; class QStringView; class QRegularExpression; class QRegularExpressionMatch; +#ifdef Q_QDOC +class QUtf8StringView; +#endif namespace QtPrivate { template @@ -261,12 +263,7 @@ public: [[nodiscard]] int compare(QStringView other, Qt::CaseSensitivity cs = Qt::CaseSensitive) const noexcept { return QtPrivate::compareStrings(*this, other, cs); } [[nodiscard]] inline int compare(QLatin1StringView other, Qt::CaseSensitivity cs = Qt::CaseSensitive) const noexcept; - template - [[nodiscard]] int compare(QBasicUtf8StringView other, - Qt::CaseSensitivity cs = Qt::CaseSensitive) const noexcept - { - return QtPrivate::compareStrings(*this, other, cs); - } + [[nodiscard]] inline int compare(QUtf8StringView other, Qt::CaseSensitivity cs = Qt::CaseSensitive) const noexcept; [[nodiscard]] constexpr int compare(QChar c) const noexcept { return size() >= 1 ? compare_single_char_helper(*utf16() - c.unicode()) : -1; } [[nodiscard]] int compare(QChar c, Qt::CaseSensitivity cs) const noexcept @@ -467,15 +464,6 @@ inline QStringView qToStringViewIgnoringNull(const QStringLike &s) noexcept R{{char16_t(c), u'\0'}} ; } -// QBasicUtf8StringView functions: - -template -[[nodiscard]] int QBasicUtf8StringView::compare(QStringView other, - Qt::CaseSensitivity cs) const noexcept -{ - return QtPrivate::compareStrings(*this, other, cs); -} - QT_END_NAMESPACE #endif /* QSTRINGVIEW_H */ diff --git a/src/corelib/text/qutf8stringview.h b/src/corelib/text/qutf8stringview.h index c60d0e0c9a6..9d7f01b7084 100644 --- a/src/corelib/text/qutf8stringview.h +++ b/src/corelib/text/qutf8stringview.h @@ -178,6 +178,7 @@ public: #ifdef Q_QDOC QBasicUtf8StringView(const QByteArray &str) noexcept; + constexpr QBasicUtf8StringView(const storage_type *d, qsizetype n) noexcept {}; #else template = true> QBasicUtf8StringView(const String &str) noexcept @@ -188,7 +189,7 @@ public: constexpr QBasicUtf8StringView(const Container &c) noexcept : QBasicUtf8StringView(std::data(c), lengthHelperContainer(c)) {} -#ifdef __cpp_char8_t +#if defined(__cpp_char8_t) && !defined(Q_QDOC) constexpr QBasicUtf8StringView(QBasicUtf8StringView other) : QBasicUtf8StringView(other.data(), other.size()) {} #endif @@ -201,7 +202,7 @@ public: [[nodiscard]] constexpr qsizetype size() const noexcept { return m_size; } [[nodiscard]] const_pointer data() const noexcept { return reinterpret_cast(m_data); } -#if defined(__cpp_char8_t) || defined(Q_QDOC) +#ifdef __cpp_char8_t [[nodiscard]] const char8_t *utf8() const noexcept { return reinterpret_cast(m_data); } #endif @@ -338,11 +339,11 @@ private: #else template Q_DECLARE_TYPEINFO_BODY(QBasicUtf8StringView, Q_PRIMITIVE_TYPE); -#endif // Q_QDOC template , bool> = true> [[nodiscard]] inline q_no_char8_t::QUtf8StringView qToUtf8StringViewIgnoringNull(const QStringLike &s) noexcept { return q_no_char8_t::QUtf8StringView(s.data(), s.size()); } +#endif // Q_QDOC QT_END_NAMESPACE diff --git a/src/corelib/text/qutf8stringview.qdoc b/src/corelib/text/qutf8stringview.qdoc index e19e451f99a..60ebe954edb 100644 --- a/src/corelib/text/qutf8stringview.qdoc +++ b/src/corelib/text/qutf8stringview.qdoc @@ -203,6 +203,11 @@ \sa isNull() */ +/*! + \fn QUtf8StringView::QUtf8StringView(const storage_type *d, qsizetype n) + \internal +*/ + /*! \fn QUtf8StringView::QUtf8StringView(std::nullptr_t) @@ -654,6 +659,19 @@ \sa sliced(), first(), last(), chopped(), truncate() */ +/*! + \fn int QUtf8StringView::compare(QLatin1StringView str, Qt::CaseSensitivity cs) const + \fn int QUtf8StringView::compare(QUtf8StringView str, Qt::CaseSensitivity cs) const + \fn int QUtf8StringView::compare(QStringView str, Qt::CaseSensitivity cs) const + \since 6.5 + + Returns an integer that compares to zero as this string view compares to the + string view \a str. + + \include qstring.qdocinc {search-comparison-case-sensitivity} {comparison} +*/ + + /*! \fn QUtf8StringView::isValidUtf8() const