summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/corelib/compat/removed_api.cpp5
-rw-r--r--src/corelib/text/qbytearraymatcher.cpp22
-rw-r--r--src/corelib/text/qbytearraymatcher.h14
-rw-r--r--tests/auto/corelib/text/qbytearraymatcher/tst_qbytearraymatcher.cpp34
4 files changed, 56 insertions, 19 deletions
diff --git a/src/corelib/compat/removed_api.cpp b/src/corelib/compat/removed_api.cpp
index 4cc0bffe20..d670bad407 100644
--- a/src/corelib/compat/removed_api.cpp
+++ b/src/corelib/compat/removed_api.cpp
@@ -75,6 +75,11 @@ int QStaticByteArrayMatcherBase::indexOfIn(const char *h, uint hl, const char *n
# endif // QT_POINTER_SIZE != 4
+qsizetype QByteArrayMatcher::indexIn(const QByteArray &ba, qsizetype from) const
+{
+ return indexIn(QByteArrayView{ba}, from); // ba.isNull() may be significant, so don't ignore it!
+}
+
#include "tools/qcryptographichash.h"
void QCryptographicHash::addData(const QByteArray &data)
diff --git a/src/corelib/text/qbytearraymatcher.cpp b/src/corelib/text/qbytearraymatcher.cpp
index ee4d8d265b..0d96355df2 100644
--- a/src/corelib/text/qbytearraymatcher.cpp
+++ b/src/corelib/text/qbytearraymatcher.cpp
@@ -206,21 +206,6 @@ void QByteArrayMatcher::setPattern(const QByteArray &pattern)
}
/*!
- Searches the byte array \a ba, from byte position \a from (default
- 0, i.e. from the first byte), for the byte array pattern() that
- was set in the constructor or in the most recent call to
- setPattern(). Returns the position where the pattern() matched in
- \a ba, or -1 if no match was found.
-*/
-qsizetype QByteArrayMatcher::indexIn(const QByteArray &ba, qsizetype from) const
-{
- if (from < 0)
- from = 0;
- return bm_find(reinterpret_cast<const uchar *>(ba.constData()), ba.size(), from,
- p.p, p.l, p.q_skiptable);
-}
-
-/*!
Searches the char string \a str, which has length \a len, from
byte position \a from (default 0, i.e. from the first byte), for
the byte array pattern() that was set in the constructor or in the
@@ -246,6 +231,13 @@ qsizetype QByteArrayMatcher::indexIn(const char *str, qsizetype len, qsizetype f
setPattern(). Returns the position where the pattern() matched in
\a data, or -1 if no match was found.
*/
+qsizetype QByteArrayMatcher::indexIn(QByteArrayView data, qsizetype from) const
+{
+ if (from < 0)
+ from = 0;
+ return bm_find(reinterpret_cast<const uchar *>(data.data()), data.size(), from,
+ p.p, p.l, p.q_skiptable);
+}
/*!
\fn QByteArray QByteArrayMatcher::pattern() const
diff --git a/src/corelib/text/qbytearraymatcher.h b/src/corelib/text/qbytearraymatcher.h
index 80473c7585..7aa6226b24 100644
--- a/src/corelib/text/qbytearraymatcher.h
+++ b/src/corelib/text/qbytearraymatcher.h
@@ -65,12 +65,15 @@ public:
void setPattern(const QByteArray &pattern);
+#if QT_REMOVED_SINCE(6, 3)
qsizetype indexIn(const QByteArray &ba, qsizetype from = 0) const;
+#else
+ Q_WEAK_OVERLOAD
+ qsizetype indexIn(const QByteArray &ba, qsizetype from = 0) const
+ { return indexIn(QByteArrayView{ba}, from); }
+#endif
qsizetype indexIn(const char *str, qsizetype len, qsizetype from = 0) const;
- qsizetype indexIn(QByteArrayView data, qsizetype from = 0) const
- {
- return indexIn(data.data(), data.size(), from);
- }
+ qsizetype indexIn(QByteArrayView data, qsizetype from = 0) const;
inline QByteArray pattern() const
{
if (q_pattern.isNull())
@@ -162,10 +165,13 @@ public:
m_pattern[i] = patternToMatch[i];
}
+ Q_WEAK_OVERLOAD
qsizetype indexIn(const QByteArray &haystack, qsizetype from = 0) const noexcept
{ return this->indexOfIn(m_pattern, N - 1, haystack.data(), haystack.size(), from); }
qsizetype indexIn(const char *haystack, qsizetype hlen, qsizetype from = 0) const noexcept
{ return this->indexOfIn(m_pattern, N - 1, haystack, hlen, from); }
+ qsizetype indexIn(QByteArrayView haystack, qsizetype from = 0) const noexcept
+ { return this->indexOfIn(m_pattern, N - 1, haystack.data(), haystack.size(), from); }
QByteArray pattern() const { return QByteArray(m_pattern, qsizetype(N - 1)); }
};
diff --git a/tests/auto/corelib/text/qbytearraymatcher/tst_qbytearraymatcher.cpp b/tests/auto/corelib/text/qbytearraymatcher/tst_qbytearraymatcher.cpp
index aa2b928e95..859854dfbc 100644
--- a/tests/auto/corelib/text/qbytearraymatcher/tst_qbytearraymatcher.cpp
+++ b/tests/auto/corelib/text/qbytearraymatcher/tst_qbytearraymatcher.cpp
@@ -48,12 +48,46 @@ class tst_QByteArrayMatcher : public QObject
Q_OBJECT
private slots:
+ void overloads();
void interface();
void indexIn();
void staticByteArrayMatcher();
void haystacksWithMoreThan4GiBWork();
};
+void tst_QByteArrayMatcher::overloads()
+{
+ QByteArray hello = QByteArrayLiteral("hello");
+ QByteArray hello2 = hello.repeated(2);
+ {
+ QByteArrayMatcher m("hello");
+ QCOMPARE(m.pattern(), "hello");
+ QCOMPARE(m.indexIn("hello"), 0);
+ }
+ {
+ QByteArrayMatcher m("hello", qsizetype(3));
+ QCOMPARE(m.pattern(), "hel");
+ QCOMPARE(m.indexIn("hellohello", qsizetype(2)), -1); // haystack is "he", not: from is 2
+ QCOMPARE(m.indexIn("hellohello", qsizetype(3)), 0); // haystack is "hel", not: from is 3
+ }
+ {
+ QByteArrayMatcher m(hello);
+ QCOMPARE(m.pattern(), "hello");
+ QCOMPARE(m.indexIn(hello), 0);
+ QCOMPARE(m.indexIn(hello2, qsizetype(1)), hello.size());
+ }
+ {
+ QStaticByteArrayMatcher m("hel");
+ QCOMPARE(m.pattern(), "hel");
+ QCOMPARE(m.indexIn("hello"), qsizetype(0));
+ QCOMPARE(m.indexIn("hellohello", qsizetype(2)), -1); // haystack is "he", not: from is 2
+ QCOMPARE(m.indexIn("hellohello", qsizetype(3)), 0); // haystack is "hel", not: from is 3
+ QCOMPARE(m.indexIn(hello), 0);
+ QCOMPARE(m.indexIn(hello2, qsizetype(2)), hello.size()); // from is 2
+ QCOMPARE(m.indexIn(hello2, qsizetype(3)), hello.size()); // from is 3
+ }
+}
+
void tst_QByteArrayMatcher::interface()
{
const char needle[] = "abc123";