diff options
Diffstat (limited to 'src/corelib/text/qstring.h')
-rw-r--r-- | src/corelib/text/qstring.h | 62 |
1 files changed, 50 insertions, 12 deletions
diff --git a/src/corelib/text/qstring.h b/src/corelib/text/qstring.h index 8c09c80f5e..5bec5dffbe 100644 --- a/src/corelib/text/qstring.h +++ b/src/corelib/text/qstring.h @@ -361,14 +361,11 @@ public: #endif private: template <typename T> - struct is_convertible_to_view_or_qstring_helper + struct is_convertible_to_view_or_qstring : std::integral_constant<bool, std::is_convertible<T, QString>::value || std::is_convertible<T, QStringView>::value || std::is_convertible<T, QLatin1String>::value> {}; - template <typename T> - struct is_convertible_to_view_or_qstring - : is_convertible_to_view_or_qstring_helper<typename std::decay<T>::type> {}; public: template <typename...Args> Q_REQUIRED_RESULT @@ -541,17 +538,21 @@ public: QString &insert(int i, const QChar *uc, int len); inline QString &insert(int i, const QString &s) { return insert(i, s.constData(), s.length()); } inline QString &insert(int i, const QStringRef &s); + inline QString &insert(int i, QStringView s) + { return insert(i, s.data(), s.length()); } QString &insert(int i, QLatin1String s); QString &append(QChar c); QString &append(const QChar *uc, int len); QString &append(const QString &s); QString &append(const QStringRef &s); QString &append(QLatin1String s); + inline QString &append(QStringView s) { return append(s.data(), s.length()); } inline QString &prepend(QChar c) { return insert(0, c); } inline QString &prepend(const QChar *uc, int len) { return insert(0, uc, len); } inline QString &prepend(const QString &s) { return insert(0, s); } inline QString &prepend(const QStringRef &s) { return insert(0, s); } inline QString &prepend(QLatin1String s) { return insert(0, s); } + inline QString &prepend(QStringView s) { return insert(0, s); } inline QString &operator+=(QChar c) { if (d->ref.isShared() || uint(d->size) + 2u > d->alloc) @@ -565,6 +566,7 @@ public: inline QString &operator+=(const QString &s) { return append(s); } inline QString &operator+=(const QStringRef &s) { return append(s); } inline QString &operator+=(QLatin1String s) { return append(s); } + inline QString &operator+=(QStringView s) { return append(s); } QString &remove(int i, int len); QString &remove(QChar c, Qt::CaseSensitivity cs = Qt::CaseSensitive); @@ -600,28 +602,28 @@ public: SkipEmptyParts Q_DECL_ENUMERATOR_DEPRECATED }; - Q_REQUIRED_RESULT QT_DEPRECATED_VERSION_X_5_15("Use Qt::SplitBehavior variant instead") + Q_REQUIRED_RESULT QT_DEPRECATED_VERSION_X_5_15("Use split(const QString &sep, Qt::SplitBehavior ...) variant instead") QStringList split(const QString &sep, SplitBehavior behavior, Qt::CaseSensitivity cs = Qt::CaseSensitive) const; - Q_REQUIRED_RESULT QT_DEPRECATED_VERSION_X_5_15("Use Qt::SplitBehavior variant instead") + Q_REQUIRED_RESULT QT_DEPRECATED_VERSION_X_5_15("Use splitRef(const QString &sep, Qt::SplitBehavior ...) variant instead") QVector<QStringRef> splitRef(const QString &sep, SplitBehavior behavior, Qt::CaseSensitivity cs = Qt::CaseSensitive) const; - Q_REQUIRED_RESULT QT_DEPRECATED_VERSION_X_5_15("Use Qt::SplitBehavior variant instead") + Q_REQUIRED_RESULT QT_DEPRECATED_VERSION_X_5_15("Use split(QChar sep, Qt::SplitBehavior ...) variant instead") QStringList split(QChar sep, SplitBehavior behavior, Qt::CaseSensitivity cs = Qt::CaseSensitive) const; - Q_REQUIRED_RESULT QT_DEPRECATED_VERSION_X_5_15("Use Qt::SplitBehavior variant instead") + Q_REQUIRED_RESULT QT_DEPRECATED_VERSION_X_5_15("Use splitRef(QChar sep, Qt::SplitBehavior ...) variant instead") QVector<QStringRef> splitRef(QChar sep, SplitBehavior behavior, Qt::CaseSensitivity cs = Qt::CaseSensitive) const; #ifndef QT_NO_REGEXP - Q_REQUIRED_RESULT QT_DEPRECATED_VERSION_X_5_15("Use Qt::SplitBehavior variant instead") + Q_REQUIRED_RESULT QT_DEPRECATED_VERSION_X_5_15("Use split(const QRegularExpression &, Qt::SplitBehavior) variant instead") QStringList split(const QRegExp &sep, SplitBehavior behavior) const; - Q_REQUIRED_RESULT QT_DEPRECATED_VERSION_X_5_15("Use Qt::SplitBehavior variant instead") + Q_REQUIRED_RESULT QT_DEPRECATED_VERSION_X_5_15("Use splitRef(const QRegularExpression &, Qt::SplitBehavior) variant instead") QVector<QStringRef> splitRef(const QRegExp &sep, SplitBehavior behavior) const; #endif #if QT_CONFIG(regularexpression) - Q_REQUIRED_RESULT QT_DEPRECATED_VERSION_X_5_15("Use Qt::SplitBehavior variant instead") + Q_REQUIRED_RESULT QT_DEPRECATED_VERSION_X_5_15("Use split(const QRegularExpression &, Qt::SplitBehavior) variant instead") QStringList split(const QRegularExpression &sep, SplitBehavior behavior) const; - Q_REQUIRED_RESULT QT_DEPRECATED_VERSION_X_5_15("Use Qt::SplitBehavior variant instead") + Q_REQUIRED_RESULT QT_DEPRECATED_VERSION_X_5_15("Use splitRef(const QRegularExpression &, Qt::SplitBehavior) variant instead") QVector<QStringRef> splitRef(const QRegularExpression &sep, SplitBehavior behavior) const; #endif #endif // 5.15 deprecations @@ -1226,6 +1228,10 @@ public: { return operator=(QChar::fromLatin1(c)); } inline QT_ASCII_CAST_WARN QCharRef &operator=(uchar c) { return operator=(QChar::fromLatin1(c)); } +#else + // prevent char -> int promotion, bypassing QT_NO_CAST_FROM_ASCII + QCharRef &operator=(char c) = delete; + QCharRef &operator=(uchar c) = delete; #endif inline QCharRef &operator=(const QCharRef &c) { return operator=(QChar(c)); } inline QCharRef &operator=(ushort rc) { return operator=(QChar(rc)); } @@ -1780,8 +1786,10 @@ public: int localeAwareCompare(const QString &s) const; int localeAwareCompare(const QStringRef &s) const; + int localeAwareCompare(QStringView str) const; static int localeAwareCompare(const QStringRef &s1, const QString &s2); static int localeAwareCompare(const QStringRef &s1, const QStringRef &s2); + static int localeAwareCompare(QStringView s1, QStringView s2); Q_REQUIRED_RESULT QStringRef trimmed() const; short toShort(bool *ok = nullptr, int base = 10) const; @@ -2016,10 +2024,14 @@ inline int QStringRef::localeAwareCompare(const QString &s) const { return QString::localeAwareCompare_helper(constData(), length(), s.constData(), s.length()); } inline int QStringRef::localeAwareCompare(const QStringRef &s) const { return QString::localeAwareCompare_helper(constData(), length(), s.constData(), s.length()); } +inline int QStringRef::localeAwareCompare(QStringView s) const +{ return QString::localeAwareCompare_helper(constData(), length(), s.data(), int(s.size())); } inline int QStringRef::localeAwareCompare(const QStringRef &s1, const QString &s2) { return QString::localeAwareCompare_helper(s1.constData(), s1.length(), s2.constData(), s2.length()); } inline int QStringRef::localeAwareCompare(const QStringRef &s1, const QStringRef &s2) { return QString::localeAwareCompare_helper(s1.constData(), s1.length(), s2.constData(), s2.length()); } +inline int QStringRef::localeAwareCompare(QStringView s1, QStringView s2) +{ return QString::localeAwareCompare_helper(s1.data(), int(s1.size()), s2.data(), int(s2.size())); } #if QT_STRINGVIEW_LEVEL < 2 inline bool QStringRef::contains(const QString &s, Qt::CaseSensitivity cs) const @@ -2121,6 +2133,32 @@ QString QLatin1String::arg(Args &&...args) const return QtPrivate::argToQStringDispatch(*this, QtPrivate::qStringLikeToArg(args)...); } +inline qsizetype QStringView::count(QChar c, Qt::CaseSensitivity cs) const noexcept +{ return toString().count(c, cs); } +inline qsizetype QStringView::count(QStringView s, Qt::CaseSensitivity cs) const noexcept +{ return toString().count(s.toString(), cs); } + +inline short QStringView::toShort(bool *ok, int base) const +{ return toString().toShort(ok, base); } +inline ushort QStringView::toUShort(bool *ok, int base) const +{ return toString().toUShort(ok, base); } +inline int QStringView::toInt(bool *ok, int base) const +{ return toString().toInt(ok, base); } +inline uint QStringView::toUInt(bool *ok, int base) const +{ return toString().toUInt(ok, base); } +inline long QStringView::toLong(bool *ok, int base) const +{ return toString().toLong(ok, base); } +inline ulong QStringView::toULong(bool *ok, int base) const +{ return toString().toULong(ok, base); } +inline qlonglong QStringView::toLongLong(bool *ok, int base) const +{ return toString().toLongLong(ok, base); } +inline qulonglong QStringView::toULongLong(bool *ok, int base) const +{ return toString().toULongLong(ok, base); } +inline float QStringView::toFloat(bool *ok) const +{ return toString().toFloat(ok); } +inline double QStringView::toDouble(bool *ok) const +{ return toString().toDouble(ok); } + QT_END_NAMESPACE #if defined(QT_USE_FAST_OPERATOR_PLUS) || defined(QT_USE_QSTRINGBUILDER) |