diff options
author | Ahmad Samir <a.samirh78@gmail.com> | 2023-09-17 17:16:33 +0300 |
---|---|---|
committer | Ahmad Samir <a.samirh78@gmail.com> | 2024-05-08 22:05:35 +0200 |
commit | 9a61bc5dfc3c68200dbf48fd79771a856fae26d5 (patch) | |
tree | 059109d3d16248b34524fbffdd7efad312f09a95 /src/corelib/text | |
parent | ec88e63f2a321ec010a7cbc5e5f48b22533a4c40 (diff) |
QStaticLatin1StringMatcher: add indexIn(QStringView)
... mirroring the same change in QLatin1StringMatcher.
Task-number: QTBUG-117054
Change-Id: I8d1f4ed01ee75a51e3d99a165dbb35ae7dae5886
Reviewed-by: Marc Mutz <marc.mutz@qt.io>
Diffstat (limited to 'src/corelib/text')
-rw-r--r-- | src/corelib/text/qstaticlatin1stringmatcher.h | 23 | ||||
-rw-r--r-- | src/corelib/text/qstaticlatin1stringmatcher.qdoc | 1 |
2 files changed, 21 insertions, 3 deletions
diff --git a/src/corelib/text/qstaticlatin1stringmatcher.h b/src/corelib/text/qstaticlatin1stringmatcher.h index d80ebd8547..bd6d9db08b 100644 --- a/src/corelib/text/qstaticlatin1stringmatcher.h +++ b/src/corelib/text/qstaticlatin1stringmatcher.h @@ -109,13 +109,30 @@ public: } constexpr qsizetype indexIn(QLatin1StringView haystack, qsizetype from = 0) const noexcept + { return indexIn_helper(haystack, from); } + + constexpr qsizetype indexIn(QStringView haystack, qsizetype from = 0) const noexcept + { return indexIn_helper(haystack, from); } + +private: + template <typename String> + constexpr qsizetype indexIn_helper(String haystack, qsizetype from = 0) const noexcept { + static_assert(QtPrivate::isLatin1OrUtf16View<String>); + if (from >= haystack.size()) return -1; - const char *begin = haystack.begin() + from; - const char *end = haystack.end(); + + const auto start = [haystack]() constexpr { + if constexpr (std::is_same_v<String, QStringView>) + return haystack.utf16(); + else + return haystack.begin(); + }(); + const auto begin = start + from; + const auto end = start + haystack.size(); const auto r = m_searcher(begin, end, m_pattern.begin(), m_pattern.end()); - return r.begin == end ? -1 : std::distance(haystack.begin(), r.begin); + return r.begin == end ? -1 : std::distance(start, r.begin); } }; diff --git a/src/corelib/text/qstaticlatin1stringmatcher.qdoc b/src/corelib/text/qstaticlatin1stringmatcher.qdoc index 6577f985b2..86edf69bc2 100644 --- a/src/corelib/text/qstaticlatin1stringmatcher.qdoc +++ b/src/corelib/text/qstaticlatin1stringmatcher.qdoc @@ -44,6 +44,7 @@ /*! \fn template<Qt::CaseSensitivity CS, size_t N> constexpr qsizetype QStaticLatin1StringMatcher<CS, N>::indexIn(QLatin1StringView haystack, qsizetype from) const + \fn template<Qt::CaseSensitivity CS, size_t N> constexpr qsizetype QStaticLatin1StringMatcher<CS, N>::indexIn(QStringView haystack, qsizetype from) const Searches the QLatin1StringView \a haystack, from byte position \a from (default 0, i.e. from the first byte), for QLatin1StringView pattern() |