diff options
author | Giuseppe D'Angelo <giuseppe.dangelo@kdab.com> | 2020-10-16 20:10:11 +0200 |
---|---|---|
committer | Giuseppe D'Angelo <giuseppe.dangelo@kdab.com> | 2020-12-01 23:03:28 +0100 |
commit | b2ea30dde05d30e2c2c672b17ae6f368164e7f88 (patch) | |
tree | 3deb7e476e100224c8974bbb4810dbf76896ac4d | |
parent | 11bde366e8316f06db88b95dabd397a35c398b7e (diff) |
QString/QByteArray: add erase/erase_if
[ChangeLog][QtCore][QString] Added erase() and erase_if()
for consistent container erasure.
[ChangeLog][QtCore][QByteArray] Added erase() and erase_if()
for consistent container erasure.
Change-Id: I23e8565d39044c1f1d756500589c1f2b65e1a88f
Reviewed-by: Andrei Golubev <andrei.golubev@qt.io>
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
-rw-r--r-- | src/corelib/text/qbytearray.cpp | 31 | ||||
-rw-r--r-- | src/corelib/text/qbytearray.h | 18 | ||||
-rw-r--r-- | src/corelib/text/qstring.cpp | 33 | ||||
-rw-r--r-- | src/corelib/text/qstring.h | 18 |
4 files changed, 100 insertions, 0 deletions
diff --git a/src/corelib/text/qbytearray.cpp b/src/corelib/text/qbytearray.cpp index 3845946ce9..cb38f25c19 100644 --- a/src/corelib/text/qbytearray.cpp +++ b/src/corelib/text/qbytearray.cpp @@ -2067,6 +2067,16 @@ QByteArray &QByteArray::remove(qsizetype pos, qsizetype len) } /*! + \fn template <typename Predicate> QByteArray &QByteArray::removeIf(Predicate pred) + \since 6.1 + + Removes all bytes for which the predicate \a pred returns true + from the byte array. Returns a reference to the byte array. + + \sa remove() +*/ + +/*! Replaces \a len bytes from index position \a pos with the byte array \a after, and returns a reference to this byte array. @@ -4750,4 +4760,25 @@ size_t qHash(const QByteArray::FromBase64Result &key, size_t seed) noexcept return qHashMulti(seed, key.decoded, static_cast<int>(key.decodingStatus)); } +/*! \fn template <typename T> qsizetype erase(QByteArray &ba, const T &t) + \relates QByteArray + \since 6.1 + + Removes all elements that compare equal to \a t from the + byte array \a ba. Returns the number of elements removed, if any. + + \sa erase_if +*/ + +/*! \fn template <typename Predicate> qsizetype erase_if(QByteArray &ba, Predicate pred) + \relates QByteArray + \since 6.1 + + Removes all elements for which the predicate \a pred returns true + from the byte array \a ba. Returns the number of elements removed, if + any. + + \sa erase +*/ + QT_END_NAMESPACE diff --git a/src/corelib/text/qbytearray.h b/src/corelib/text/qbytearray.h index e185887ad7..13bd178ab6 100644 --- a/src/corelib/text/qbytearray.h +++ b/src/corelib/text/qbytearray.h @@ -309,6 +309,12 @@ public: { return insert(i, QByteArrayView(s, len)); } QByteArray &remove(qsizetype index, qsizetype len); + template <typename Predicate> + QByteArray &removeIf(Predicate pred) + { + QtPrivate::sequential_erase_if(*this, pred); + return *this; + } QByteArray &replace(qsizetype index, qsizetype len, const char *s, qsizetype alen) { return replace(index, len, QByteArrayView(s, alen)); } @@ -721,6 +727,18 @@ Q_DECLARE_SHARED(QByteArray::FromBase64Result) Q_CORE_EXPORT Q_DECL_PURE_FUNCTION size_t qHash(const QByteArray::FromBase64Result &key, size_t seed = 0) noexcept; +template <typename T> +qsizetype erase(QByteArray &ba, const T &t) +{ + return QtPrivate::sequential_erase(ba, t); +} + +template <typename Predicate> +qsizetype erase_if(QByteArray &ba, Predicate pred) +{ + return QtPrivate::sequential_erase_if(ba, pred); +} + // // QByteArrayView members that require QByteArray: // diff --git a/src/corelib/text/qstring.cpp b/src/corelib/text/qstring.cpp index 76f0e15303..17c3e8d3cf 100644 --- a/src/corelib/text/qstring.cpp +++ b/src/corelib/text/qstring.cpp @@ -3088,6 +3088,16 @@ QString &QString::remove(QChar ch, Qt::CaseSensitivity cs) */ /*! + \fn template <typename Predicate> QString &QString::removeIf(Predicate pred) + \since 6.1 + + Removes all elements for which the predicate \a pred returns true + from the string. Returns a reference to the string. + + \sa remove() +*/ + +/*! \fn QString &QString::replace(qsizetype position, qsizetype n, const QString &after) Replaces \a n characters beginning at index \a position with @@ -10138,4 +10148,27 @@ float QStringView::toFloat(bool *ok) const return QLocaleData::convertDoubleToFloat(toDouble(ok), ok); } +/*! + \fn template <typename T> qsizetype erase(QString &s, const T &t) + \relates QString + \since 6.1 + + Removes all elements that compare equal to \a t from the + string \a s. Returns the number of elements removed, if any. + + \sa erase_if +*/ + +/*! + \fn template <typename Predicate> qsizetype erase_if(QString &s, Predicate pred) + \relates QString + \since 6.1 + + Removes all elements for which the predicate \a pred returns true + from the string \a s. Returns the number of elements removed, if + any. + + \sa erase +*/ + QT_END_NAMESPACE diff --git a/src/corelib/text/qstring.h b/src/corelib/text/qstring.h index 843ee9966e..d6b7dc1522 100644 --- a/src/corelib/text/qstring.h +++ b/src/corelib/text/qstring.h @@ -642,6 +642,12 @@ public: QString &remove(QChar c, Qt::CaseSensitivity cs = Qt::CaseSensitive); QString &remove(QLatin1String s, Qt::CaseSensitivity cs = Qt::CaseSensitive); QString &remove(const QString &s, Qt::CaseSensitivity cs = Qt::CaseSensitive); + template <typename Predicate> + QString &removeIf(Predicate pred) + { + QtPrivate::sequential_erase_if(*this, pred); + return *this; + } QString &replace(qsizetype i, qsizetype len, QChar after); QString &replace(qsizetype i, qsizetype len, const QChar *s, qsizetype slen); QString &replace(qsizetype i, qsizetype len, const QString &after); @@ -1523,6 +1529,18 @@ QString QLatin1String::arg(Args &&...args) const return QtPrivate::argToQStringDispatch(*this, QtPrivate::qStringLikeToArg(args)...); } +template <typename T> +qsizetype erase(QString &s, const T &t) +{ + return QtPrivate::sequential_erase(s, t); +} + +template <typename Predicate> +qsizetype erase_if(QString &s, Predicate pred) +{ + return QtPrivate::sequential_erase_if(s, pred); +} + QT_END_NAMESPACE #if defined(QT_USE_FAST_OPERATOR_PLUS) || defined(QT_USE_QSTRINGBUILDER) |