diff options
author | Lars Knoll <lars.knoll@qt.io> | 2020-09-23 09:55:54 +0200 |
---|---|---|
committer | Lars Knoll <lars.knoll@qt.io> | 2020-10-15 11:29:21 +0200 |
commit | f2b8412f91198ef1d00c06a05183de1768b85757 (patch) | |
tree | 602e1744238985a6bf6fb0e857b756305b302c90 /src | |
parent | fcbeebc5828228078c38329940fabb80f22e3909 (diff) |
Add QStringView::split()
The implementation has to live in qstringlist.h and
qregularexpression.h, as those classes are only forward
declared in qstring.h.
Task-number: QTBUG-86516
Change-Id: Ia9b3ff48999d1c2e7df905191ee192764b309d08
Reviewed-by: MÃ¥rten Nordheim <marten.nordheim@qt.io>
Diffstat (limited to 'src')
-rw-r--r-- | src/corelib/text/qregularexpression.h | 14 | ||||
-rw-r--r-- | src/corelib/text/qstringlist.h | 25 | ||||
-rw-r--r-- | src/corelib/text/qstringview.cpp | 17 | ||||
-rw-r--r-- | src/corelib/text/qstringview.h | 14 |
4 files changed, 70 insertions, 0 deletions
diff --git a/src/corelib/text/qregularexpression.h b/src/corelib/text/qregularexpression.h index 4fa258b080..e00979527d 100644 --- a/src/corelib/text/qregularexpression.h +++ b/src/corelib/text/qregularexpression.h @@ -278,6 +278,20 @@ private: Q_DECLARE_SHARED(QRegularExpressionMatchIterator) +// implementation here, so we have all required classes +inline +QList<QStringView> QStringView::split(const QRegularExpression &sep, Qt::SplitBehavior behavior) const +{ + Q_ASSERT(int(m_size) == m_size); + QString s = QString::fromRawData(data(), int(m_size)); + const auto split = s.splitRef(sep, behavior); + QList<QStringView> result; + result.reserve(split.size()); + for (const QStringRef &r : split) + result.append(r); + return result; +} + QT_END_NAMESPACE #endif // QREGULAREXPRESSION_H diff --git a/src/corelib/text/qstringlist.h b/src/corelib/text/qstringlist.h index 9ea379bb92..02b129a3cb 100644 --- a/src/corelib/text/qstringlist.h +++ b/src/corelib/text/qstringlist.h @@ -384,6 +384,31 @@ inline int QStringList::lastIndexOf(const QRegularExpression &rx, int from) cons #endif // QT_CONFIG(regularexpression) #endif // Q_QDOC +// those methods need to be here, so they can be implemented inline +inline +QList<QStringView> QStringView::split(QStringView sep, Qt::SplitBehavior behavior, Qt::CaseSensitivity cs) const +{ + Q_ASSERT(int(m_size) == m_size); + QString s = QString::fromRawData(data(), int(m_size)); + const auto split = s.splitRef(sep.toString(), behavior, cs); + QList<QStringView> result; + for (const QStringRef &r : split) + result.append(QStringView(m_data + r.position(), r.size())); + return result; +} + +inline +QList<QStringView> QStringView::split(QChar sep, Qt::SplitBehavior behavior, Qt::CaseSensitivity cs) const +{ + Q_ASSERT(int(m_size) == m_size); + QString s = QString::fromRawData(data(), int(m_size)); + const auto split = s.splitRef(sep, behavior, cs); + QList<QStringView> result; + for (const QStringRef &r : split) + result.append(QStringView(m_data + r.position(), r.size())); + return result; +} + QT_END_NAMESPACE #endif // QSTRINGLIST_H diff --git a/src/corelib/text/qstringview.cpp b/src/corelib/text/qstringview.cpp index 1451dfed44..f3712a412a 100644 --- a/src/corelib/text/qstringview.cpp +++ b/src/corelib/text/qstringview.cpp @@ -899,6 +899,23 @@ QT_BEGIN_NAMESPACE */ /*! + \fn QList<QStringView> QStringView::split(QStringView sep, Qt::SplitBehavior behavior, Qt::CaseSensitivity cs) const; + \fn QList<QStringView> QStringView::split(QChar sep, Qt::SplitBehavior behavior, Qt::CaseSensitivity cs) const; + \fn QList<QStringView> QStringView::split(const QRegularExpression &sep, Qt::SplitBehavior behavior) const; + + Splits the string into substrings wherever \a sep occurs, and + returns the list of those strings. + + See QString::split() for how \a sep, \a behavior and \a cs interact to form + the result. + + \note This method has been added in 5.15.2 to simplify writing code that is portable + between Qt 5.15 and Qt 6. The implementation is not tuned for performance in Qt 5. + + \since 5.15.2 +*/ + +/*! \fn QStringView::toWCharArray(wchar_t *array) const \since 5.14 diff --git a/src/corelib/text/qstringview.h b/src/corelib/text/qstringview.h index e599e5a8c2..5e561d88a8 100644 --- a/src/corelib/text/qstringview.h +++ b/src/corelib/text/qstringview.h @@ -55,6 +55,7 @@ QT_BEGIN_NAMESPACE class QString; class QStringRef; +class QRegularExpression; namespace QtPrivate { template <typename Char> @@ -323,6 +324,19 @@ public: Q_REQUIRED_RESULT inline int toWCharArray(wchar_t *array) const; // defined in qstring.h + Q_REQUIRED_RESULT inline + QList<QStringView> split(QStringView sep, + Qt::SplitBehavior behavior = Qt::KeepEmptyParts, + Qt::CaseSensitivity cs = Qt::CaseSensitive) const; + Q_REQUIRED_RESULT inline + QList<QStringView> split(QChar sep, Qt::SplitBehavior behavior = Qt::KeepEmptyParts, + Qt::CaseSensitivity cs = Qt::CaseSensitive) const; + +#if QT_CONFIG(regularexpression) + Q_REQUIRED_RESULT inline + QList<QStringView> split(const QRegularExpression &sep, Qt::SplitBehavior behavior = Qt::KeepEmptyParts) const; +#endif + // // STL compatibility API: // |