summaryrefslogtreecommitdiffstats
path: root/src/corelib/text/qstring.h
diff options
context:
space:
mode:
authorSona Kurazyan <sona.kurazyan@qt.io>2022-03-10 19:28:21 +0100
committerSona Kurazyan <sona.kurazyan@qt.io>2022-03-19 18:51:00 +0100
commit94addad4dd1c89df9c6820d34b9a90424456c492 (patch)
tree24ee4f0355997d549d24e1833b2b1053e09d576d /src/corelib/text/qstring.h
parentc839efb07a6aa3b487dac5f86f905f35ef2c3a08 (diff)
Add QLatin1StringView as an alias for QLatin1String
And switch to using QLatin1StringView for bootstrap builds and Qt 7. [ChangeLog][QtCore] Added QLatin1StringView as an alias for QLatin1String. Task-number: QTBUG-98434 Change-Id: Iefb860b63eb05ef4755b2e26de265e6e6e4420b3 Reviewed-by: Marc Mutz <marc.mutz@qt.io> Reviewed-by: Thiago Macieira <thiago.macieira@intel.com> Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org> Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
Diffstat (limited to 'src/corelib/text/qstring.h')
-rw-r--r--src/corelib/text/qstring.h31
1 files changed, 31 insertions, 0 deletions
diff --git a/src/corelib/text/qstring.h b/src/corelib/text/qstring.h
index 2b85d9eac9..64ed40eb2a 100644
--- a/src/corelib/text/qstring.h
+++ b/src/corelib/text/qstring.h
@@ -71,6 +71,12 @@ Q_FORWARD_DECLARE_CF_TYPE(CFString);
Q_FORWARD_DECLARE_OBJC_CLASS(NSString);
#endif
+#if 0
+// Workaround for generating forward headers
+#pragma qt_class(QLatin1String)
+#pragma qt_class(QLatin1StringView)
+#endif
+
QT_BEGIN_NAMESPACE
class QRegularExpression;
@@ -81,9 +87,25 @@ namespace QtPrivate {
template <bool...B> class BoolList;
}
+#if QT_VERSION >= QT_VERSION_CHECK(7, 0, 0) || defined(QT_BOOTSTRAPPED)
+# define Q_L1S_VIEW_IS_PRIMARY
+class QLatin1StringView
+#else
class QLatin1String
+#endif
{
public:
+#ifdef Q_L1S_VIEW_IS_PRIMARY
+ constexpr inline QLatin1StringView() noexcept : m_size(0), m_data(nullptr) {}
+ constexpr QLatin1StringView(std::nullptr_t) noexcept : QLatin1StringView() {}
+ constexpr inline explicit QLatin1StringView(const char *s) noexcept
+ : m_size(s ? qsizetype(QtPrivate::lengthHelperPointer(s)) : 0), m_data(s) {}
+ constexpr explicit QLatin1StringView(const char *f, const char *l)
+ : QLatin1StringView(f, qsizetype(l - f)) {}
+ constexpr inline explicit QLatin1StringView(const char *s, qsizetype sz) noexcept : m_size(sz), m_data(s) {}
+ explicit QLatin1StringView(const QByteArray &s) noexcept : m_size(s.size()), m_data(s.constData()) {}
+ constexpr explicit QLatin1StringView(QByteArrayView s) noexcept : m_size(s.size()), m_data(s.data()) {}
+#else
constexpr inline QLatin1String() noexcept : m_size(0), m_data(nullptr) {}
Q_WEAK_OVERLOAD
constexpr QLatin1String(std::nullptr_t) noexcept : QLatin1String() {}
@@ -94,6 +116,7 @@ public:
constexpr inline explicit QLatin1String(const char *s, qsizetype sz) noexcept : m_size(sz), m_data(s) {}
explicit QLatin1String(const QByteArray &s) noexcept : m_size(s.size()), m_data(s.constData()) {}
constexpr explicit QLatin1String(QByteArrayView s) noexcept : m_size(s.size()), m_data(s.data()) {}
+#endif // !Q_L1S_VIEW_IS_PRIMARY
inline QString toString() const;
@@ -370,7 +393,11 @@ private:
qsizetype m_size;
const char *m_data;
};
+#ifdef Q_L1S_VIEW_IS_PRIMARY
+Q_DECLARE_TYPEINFO(QLatin1StringView, Q_RELOCATABLE_TYPE);
+#else
Q_DECLARE_TYPEINFO(QLatin1String, Q_RELOCATABLE_TYPE);
+#endif
// Qt 4.x compatibility
@@ -1655,4 +1682,8 @@ QT_END_NAMESPACE
#include <QtCore/qstringbuilder.h>
#endif
+#ifdef Q_L1S_VIEW_IS_PRIMARY
+# undef Q_L1S_VIEW_IS_PRIMARY
+#endif
+
#endif // QSTRING_H