diff options
author | Marc Mutz <marc.mutz@kdab.com> | 2017-04-12 09:52:24 +0200 |
---|---|---|
committer | Marc Mutz <marc.mutz@kdab.com> | 2017-04-19 12:31:33 +0000 |
commit | ba5db13c8d197706ac3dec5d351b6684f809f2e4 (patch) | |
tree | 1f0d71ab804735d2fad67db3aa57194ff1e63da4 /src/corelib | |
parent | b3e66c76aaadb979bec487869ce1fb7ee056b517 (diff) |
QStringView: add internal qToStringViewIgnoringNull()
As long as a null QString still returns non-null data(), QStringView's
QString constructor needs to call isNull(). That's a branch we often
can do without, so add an internal function that bypasses this
correctness check.
It's internal, since we might have a Q6String that returns nullptr
data() when null, which will remove the need for this function.
What the QStringView(QString) ctor does will also have to be
re-evaluated come Qt 6, but for now, keep the public QString-
QStringView conversion correct.
Change-Id: I35dc7383bc3bd018f46aeec429185135a38ddcef
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
Diffstat (limited to 'src/corelib')
-rw-r--r-- | src/corelib/tools/qstringview.cpp | 15 | ||||
-rw-r--r-- | src/corelib/tools/qstringview.h | 6 |
2 files changed, 21 insertions, 0 deletions
diff --git a/src/corelib/tools/qstringview.cpp b/src/corelib/tools/qstringview.cpp index 1dc01e321b..3b36ed9bf8 100644 --- a/src/corelib/tools/qstringview.cpp +++ b/src/corelib/tools/qstringview.cpp @@ -704,4 +704,19 @@ QT_BEGIN_NAMESPACE \sa toUtf8(), toLatin1(), toLocal8Bit(), QTextCodec */ +/*! + \fn qToStringViewIgnoringNull(const QStringLike &s); + \since 5.10 + \internal + + Convert \a s to a QStringView ignoring \c{s.isNull()}. + + Returns a string-view that references \a{s}' data, but is never null. + + This is a faster way to convert a QString or QStringRef to a QStringView, + if null QStrings can legitimately be treated as empty ones. + + \sa QString::isNull(), QStringRef::isNull(), QStringView +*/ + QT_END_NAMESPACE diff --git a/src/corelib/tools/qstringview.h b/src/corelib/tools/qstringview.h index 7aef056dee..54d054baaa 100644 --- a/src/corelib/tools/qstringview.h +++ b/src/corelib/tools/qstringview.h @@ -272,6 +272,12 @@ private: }; Q_DECLARE_TYPEINFO(QStringView, Q_MOVABLE_TYPE); +template <typename QStringLike, typename std::enable_if< + std::is_same<QStringLike, QString>::value || std::is_same<QStringLike, QStringRef>::value, + bool>::type = true> +inline QStringView qToStringViewIgnoringNull(const QStringLike &s) Q_DECL_NOTHROW +{ return QStringView(s.data(), s.size()); } + QT_END_NAMESPACE #endif /* QSTRINGVIEW_H */ |