summaryrefslogtreecommitdiffstats
path: root/src/corelib
diff options
context:
space:
mode:
authorMarc Mutz <marc.mutz@kdab.com>2017-04-12 09:52:24 +0200
committerMarc Mutz <marc.mutz@kdab.com>2017-04-19 12:31:33 +0000
commitba5db13c8d197706ac3dec5d351b6684f809f2e4 (patch)
tree1f0d71ab804735d2fad67db3aa57194ff1e63da4 /src/corelib
parentb3e66c76aaadb979bec487869ce1fb7ee056b517 (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.cpp15
-rw-r--r--src/corelib/tools/qstringview.h6
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 */