diff options
author | Sona Kurazyan <sona.kurazyan@qt.io> | 2022-02-24 14:26:05 +0100 |
---|---|---|
committer | Sona Kurazyan <sona.kurazyan@qt.io> | 2022-03-02 22:22:36 +0100 |
commit | 736213bf662b68c4e80075cef317e5a029b490dd (patch) | |
tree | b0d01bafb6902501f754d985effcdb8ce7c1bf3a | |
parent | 0e64165c2e7b14502a578f3508e5544b035e404e (diff) |
QLatin1String: add missing APIs for compatibility with Qt string views
As a drive-by, fixed misleading wording used in docs.
[ChangeLog][QtCore][Potentially Source-Incompatible Changes][QLatin1String]
Added QLatin1String(std::nullptr_t) constructor, which makes
QLatin1String(0) call ambiguous. To fix the ambiguity, nullptr
must be passed instead of 0.
Task-number: QTBUG-98433
Change-Id: I2b888aa23469343d78aa640dc39a6028b77165dd
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Marc Mutz <marc.mutz@qt.io>
-rw-r--r-- | src/corelib/text/qstring.cpp | 98 | ||||
-rw-r--r-- | src/corelib/text/qstring.h | 11 | ||||
-rw-r--r-- | tests/auto/corelib/text/qstring/tst_qstring.cpp | 46 |
3 files changed, 127 insertions, 28 deletions
diff --git a/src/corelib/text/qstring.cpp b/src/corelib/text/qstring.cpp index f1ee16901b..ae5f57ce41 100644 --- a/src/corelib/text/qstring.cpp +++ b/src/corelib/text/qstring.cpp @@ -9108,6 +9108,14 @@ QString &QString::setRawData(const QChar *unicode, qsizetype size) \sa data(), isEmpty(), isNull(), {Distinction Between Null and Empty Strings} */ +/*! \fn QLatin1String::QLatin1String(std::nullptr_t) + \since 6.4 + + Constructs a QLatin1String object that stores a \nullptr. + + \sa data(), isEmpty(), isNull(), {Distinction Between Null and Empty Strings} +*/ + /*! \fn QLatin1String::QLatin1String(const char *str) Constructs a QLatin1String object that stores \a str. @@ -9193,27 +9201,45 @@ QString &QString::setRawData(const QChar *unicode, qsizetype size) /*! \fn const char *QLatin1String::latin1() const - Returns the Latin-1 string stored in this object. + Returns the start of the Latin-1 string referenced by this object. */ /*! \fn const char *QLatin1String::data() const - Returns the Latin-1 string stored in this object. + Returns the start of the Latin-1 string referenced by this object. +*/ + +/*! \fn const char *QLatin1String::constData() const + \since 6.4 + + Returns the start of the Latin-1 string referenced by this object. + + This function is provided for compatibility with other Qt containers. + + \sa data() */ /*! \fn qsizetype QLatin1String::size() const - Returns the size of the Latin-1 string stored in this object. + Returns the size of the Latin-1 string referenced by this object. \note In version prior to Qt 6, this function returned \c{int}, restricting the amount of data that could be held in a QLatin1String on 64-bit architectures. */ +/*! \fn qsizetype QLatin1String::length() const + \since 6.4 + + Same as size(). + + This function is provided for compatibility with other Qt containers. +*/ + /*! \fn bool QLatin1String::isNull() const \since 5.10 - Returns whether the Latin-1 string stored in this object is null + Returns whether the Latin-1 string referenced by this object is null (\c{data() == nullptr}) or not. \sa isEmpty(), data() @@ -9222,12 +9248,23 @@ QString &QString::setRawData(const QChar *unicode, qsizetype size) /*! \fn bool QLatin1String::isEmpty() const \since 5.10 - Returns whether the Latin-1 string stored in this object is empty + Returns whether the Latin-1 string referenced by this object is empty (\c{size() == 0}) or not. \sa isNull(), size() */ +/*! \fn bool QLatin1String::empty() const + \since 6.4 + + Returns whether the Latin-1 string referenced by this object is empty + (\c{size() == 0}) or not. + + This function is provided for STL compatibility. + + \sa isEmpty(), isNull(), size() +*/ + /*! \fn QLatin1Char QLatin1String::at(qsizetype pos) const \since 5.8 @@ -9266,6 +9303,21 @@ QString &QString::setRawData(const QChar *unicode, qsizetype size) */ /*! + \fn QLatin1Char QLatin1String::first() const + \since 6.4 + + Returns the first character in the string. + Same as \c{at(0)} or front(). + + This function is provided for compatibility with other Qt containers. + + \warning Calling this function on an empty string constitutes + undefined behavior. + + \sa last(), front(), back() +*/ + +/*! \fn QLatin1Char QLatin1String::back() const \since 5.10 @@ -9281,6 +9333,21 @@ QString &QString::setRawData(const QChar *unicode, qsizetype size) */ /*! + \fn QLatin1Char QLatin1String::last() const + \since 6.4 + + Returns the last character in the string. + Same as \c{at(size() - 1)} or back(). + + This function is provided for compatibility with other Qt containers. + + \warning Calling this function on an empty string constitutes + undefined behavior. + + \sa first(), back(), front() +*/ + +/*! \fn int QLatin1String::compare(QStringView str, Qt::CaseSensitivity cs) const \fn int QLatin1String::compare(QLatin1String l1, Qt::CaseSensitivity cs) const \fn int QLatin1String::compare(QChar ch) const @@ -9447,6 +9514,17 @@ QString &QString::setRawData(const QChar *unicode, qsizetype size) */ /*! + \fn QLatin1String::const_iterator QLatin1String::constBegin() const + \since 6.4 + + Same as begin(). + + This function is provided for compatibility with other Qt containers. + + \sa constEnd(), begin(), cbegin(), data() +*/ + +/*! \fn QLatin1String::const_iterator QLatin1String::end() const \since 5.10 @@ -9468,6 +9546,16 @@ QString &QString::setRawData(const QChar *unicode, qsizetype size) \sa cbegin(), end(), crend() */ +/*! \fn QLatin1String::const_iterator QLatin1String::constEnd() const + \since 6.4 + + Same as end(). + + This function is provided for compatibility with other Qt containers. + + \sa constBegin(), end(), cend(), crend() +*/ + /*! \fn QLatin1String::const_reverse_iterator QLatin1String::rbegin() const \since 5.10 diff --git a/src/corelib/text/qstring.h b/src/corelib/text/qstring.h index 40e023be83..1c95b038c6 100644 --- a/src/corelib/text/qstring.h +++ b/src/corelib/text/qstring.h @@ -84,6 +84,7 @@ class QLatin1String { public: constexpr inline QLatin1String() noexcept : m_size(0), m_data(nullptr) {} + constexpr QLatin1String(std::nullptr_t) noexcept : QLatin1String() {} constexpr inline explicit QLatin1String(const char *s) noexcept : m_size(s ? qsizetype(strlen(s)) : 0), m_data(s) {} constexpr explicit QLatin1String(const char *f, const char *l) : QLatin1String(f, qsizetype(l - f)) {} @@ -96,10 +97,20 @@ public: constexpr const char *latin1() const noexcept { return m_data; } constexpr qsizetype size() const noexcept { return m_size; } constexpr const char *data() const noexcept { return m_data; } + [[nodiscard]] constexpr const char *constData() const noexcept { return data(); } + [[nodiscard]] constexpr const char *constBegin() const noexcept { return begin(); } + [[nodiscard]] constexpr const char *constEnd() const noexcept { return end(); } + + [[nodiscard]] constexpr QLatin1Char first() const { return front(); } + [[nodiscard]] constexpr QLatin1Char last() const { return back(); } + + [[nodiscard]] constexpr qsizetype length() const noexcept { return size(); } constexpr bool isNull() const noexcept { return !data(); } constexpr bool isEmpty() const noexcept { return !size(); } + [[nodiscard]] constexpr bool empty() const noexcept { return size() == 0; } + template <typename...Args> [[nodiscard]] inline QString arg(Args &&...args) const; diff --git a/tests/auto/corelib/text/qstring/tst_qstring.cpp b/tests/auto/corelib/text/qstring/tst_qstring.cpp index c295e96be4..52c0e07199 100644 --- a/tests/auto/corelib/text/qstring/tst_qstring.cpp +++ b/tests/auto/corelib/text/qstring/tst_qstring.cpp @@ -2670,7 +2670,7 @@ void tst_QString::insert_special_cases() QCOMPARE(a.insert(1, QLatin1String("ontr")), montreal); QCOMPARE(a.insert(4, ""), montreal); QCOMPARE(a.insert(3, QLatin1String("")), montreal); - QCOMPARE(a.insert(3, QLatin1String(0)), montreal); + QCOMPARE(a.insert(3, QLatin1String(nullptr)), montreal); QCOMPARE(a.insert(3, static_cast<const char *>(0)), montreal); QCOMPARE(a.insert(0, QLatin1String("a")), QLatin1String("aMontreal")); @@ -4242,7 +4242,7 @@ void tst_QString::startsWith() QVERIFY( !a.startsWith(QLatin1String("C")) ); QVERIFY( !a.startsWith(QLatin1String("ABCDEF")) ); QVERIFY( a.startsWith(QLatin1String("")) ); - QVERIFY( a.startsWith(QLatin1String(0)) ); + QVERIFY( a.startsWith(QLatin1String(nullptr)) ); QVERIFY( a.startsWith("A", Qt::CaseSensitive) ); QVERIFY( a.startsWith("A", Qt::CaseInsensitive) ); @@ -4277,7 +4277,7 @@ void tst_QString::startsWith() QVERIFY( !a.startsWith(QLatin1String("c"), Qt::CaseInsensitive) ); QVERIFY( !a.startsWith(QLatin1String("abcdef"), Qt::CaseInsensitive) ); QVERIFY( a.startsWith(QLatin1String(""), Qt::CaseInsensitive) ); - QVERIFY( a.startsWith(QLatin1String(0), Qt::CaseInsensitive) ); + QVERIFY( a.startsWith(QLatin1String(nullptr), Qt::CaseInsensitive) ); QVERIFY( a.startsWith('A', Qt::CaseSensitive) ); QVERIFY( a.startsWith(QLatin1Char('A'), Qt::CaseSensitive) ); QVERIFY( a.startsWith(QChar('A'), Qt::CaseSensitive) ); @@ -4298,7 +4298,7 @@ void tst_QString::startsWith() QVERIFY( !a.startsWith("ABC") ); QVERIFY( a.startsWith(QLatin1String("")) ); - QVERIFY( a.startsWith(QLatin1String(0)) ); + QVERIFY( a.startsWith(QLatin1String(nullptr)) ); QVERIFY( !a.startsWith(QLatin1String("ABC")) ); QVERIFY( !a.startsWith(QLatin1Char(0)) ); @@ -4311,7 +4311,7 @@ void tst_QString::startsWith() QVERIFY( !a.startsWith("ABC") ); QVERIFY( !a.startsWith(QLatin1String("")) ); - QVERIFY( a.startsWith(QLatin1String(0)) ); + QVERIFY( a.startsWith(QLatin1String(nullptr)) ); QVERIFY( !a.startsWith(QLatin1String("ABC")) ); QVERIFY( !a.startsWith(QLatin1Char(0)) ); @@ -4358,7 +4358,7 @@ void tst_QString::endsWith() QVERIFY( !a.endsWith(QLatin1String("C")) ); QVERIFY( !a.endsWith(QLatin1String("ABCDEF")) ); QVERIFY( a.endsWith(QLatin1String("")) ); - QVERIFY( a.endsWith(QLatin1String(0)) ); + QVERIFY( a.endsWith(QLatin1String(nullptr)) ); QVERIFY( a.endsWith("B", Qt::CaseSensitive) ); QVERIFY( a.endsWith("B", Qt::CaseInsensitive) ); @@ -4393,7 +4393,7 @@ void tst_QString::endsWith() QVERIFY( !a.endsWith(QLatin1String("c"), Qt::CaseInsensitive) ); QVERIFY( !a.endsWith(QLatin1String("abcdef"), Qt::CaseInsensitive) ); QVERIFY( a.endsWith(QLatin1String(""), Qt::CaseInsensitive) ); - QVERIFY( a.endsWith(QLatin1String(0), Qt::CaseInsensitive) ); + QVERIFY( a.endsWith(QLatin1String(nullptr), Qt::CaseInsensitive) ); QVERIFY( a.endsWith('B', Qt::CaseSensitive) ); QVERIFY( a.endsWith(QLatin1Char('B'), Qt::CaseSensitive) ); QVERIFY( a.endsWith(QChar('B'), Qt::CaseSensitive) ); @@ -4407,7 +4407,7 @@ void tst_QString::endsWith() TEST_VIEW_ENDS_WITH(QLatin1String("C"), false); TEST_VIEW_ENDS_WITH(QLatin1String("ABCDEF"), false); TEST_VIEW_ENDS_WITH(QLatin1String(""), true); - TEST_VIEW_ENDS_WITH(QLatin1String(0), true); + TEST_VIEW_ENDS_WITH(QLatin1String(nullptr), true); #undef TEST_VIEW_ENDS_WITH a = ""; @@ -4419,7 +4419,7 @@ void tst_QString::endsWith() QVERIFY( !a.endsWith(QChar()) ); QVERIFY( a.endsWith(QLatin1String("")) ); - QVERIFY( a.endsWith(QLatin1String(0)) ); + QVERIFY( a.endsWith(QLatin1String(nullptr)) ); QVERIFY( !a.endsWith(QLatin1String("ABC")) ); a = QString(); @@ -4428,7 +4428,7 @@ void tst_QString::endsWith() QVERIFY( !a.endsWith("ABC") ); QVERIFY( !a.endsWith(QLatin1String("")) ); - QVERIFY( a.endsWith(QLatin1String(0)) ); + QVERIFY( a.endsWith(QLatin1String(nullptr)) ); QVERIFY( !a.endsWith(QLatin1String("ABC")) ); QVERIFY( !a.endsWith(QLatin1Char(0)) ); @@ -5736,8 +5736,8 @@ void tst_QString::operator_smaller() QVERIFY( foo > empty ); QVERIFY( !(foo < empty) ); - QVERIFY( !(null < QLatin1String(0)) ); - QVERIFY( !(null > QLatin1String(0)) ); + QVERIFY( !(null < QLatin1String(nullptr)) ); + QVERIFY( !(null > QLatin1String(nullptr)) ); QVERIFY( !(null < QLatin1String("")) ); QVERIFY( !(null > QLatin1String("")) ); @@ -5746,28 +5746,28 @@ void tst_QString::operator_smaller() QVERIFY( !(empty < QLatin1String("")) ); QVERIFY( !(empty > QLatin1String("")) ); - QVERIFY( !(QLatin1String(0) < null) ); - QVERIFY( !(QLatin1String(0) > null) ); + QVERIFY( !(QLatin1String(nullptr) < null) ); + QVERIFY( !(QLatin1String(nullptr) > null) ); QVERIFY( !(QLatin1String("") < null) ); QVERIFY( !(QLatin1String("") > null) ); - QVERIFY( !(QLatin1String(0) < empty) ); - QVERIFY( !(QLatin1String(0) > empty) ); + QVERIFY( !(QLatin1String(nullptr) < empty) ); + QVERIFY( !(QLatin1String(nullptr) > empty) ); QVERIFY( !(QLatin1String("") < empty) ); QVERIFY( !(QLatin1String("") > empty) ); - QVERIFY( QLatin1String(0) < foo ); - QVERIFY( !(QLatin1String(0) > foo) ); + QVERIFY( QLatin1String(nullptr) < foo ); + QVERIFY( !(QLatin1String(nullptr) > foo) ); QVERIFY( QLatin1String("") < foo ); QVERIFY( !(QLatin1String("") > foo) ); - QVERIFY( foo > QLatin1String(0) ); - QVERIFY( !(foo < QLatin1String(0)) ); + QVERIFY( foo > QLatin1String(nullptr) ); + QVERIFY( !(foo < QLatin1String(nullptr)) ); QVERIFY( foo > QLatin1String("") ); QVERIFY( !(foo < QLatin1String("")) ); - QVERIFY( QLatin1String(0) == empty); - QVERIFY( QLatin1String(0) == null); + QVERIFY( QLatin1String(nullptr) == empty); + QVERIFY( QLatin1String(nullptr) == null); QVERIFY( QLatin1String("") == empty); QVERIFY( QLatin1String("") == null); @@ -7580,7 +7580,7 @@ void tst_QString::assignQLatin1String() QVERIFY(empty.isEmpty()); QVERIFY(!empty.isNull()); - QString null = QLatin1String(0); + QString null = QLatin1String(nullptr); QVERIFY(null.isEmpty()); QVERIFY(null.isNull()); |