From 94addad4dd1c89df9c6820d34b9a90424456c492 Mon Sep 17 00:00:00 2001 From: Sona Kurazyan Date: Thu, 10 Mar 2022 19:28:21 +0100 Subject: 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 Reviewed-by: Thiago Macieira Reviewed-by: Qt CI Bot Reviewed-by: Edward Welbourne --- src/corelib/text/qstring.h | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) (limited to 'src/corelib/text/qstring.h') 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 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 #endif +#ifdef Q_L1S_VIEW_IS_PRIMARY +# undef Q_L1S_VIEW_IS_PRIMARY +#endif + #endif // QSTRING_H -- cgit v1.2.3