QStaticByteArrayMatcher Class

template <uint N> class QStaticByteArrayMatcher

The QStaticByteArrayMatcher class is a compile-time version of QByteArrayMatcher. More...

Header: #include <QStaticByteArrayMatcher>
CMake: find_package(Qt6 COMPONENTS Core REQUIRED) target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake: QT += core
Since: Qt 5.9

Public Functions

int indexIn(const QByteArray &haystack, int from = 0) const
int indexIn(const char *haystack, int hlen, int from = 0) const
QByteArray pattern() const
QStaticByteArrayMatcher<N> qMakeStaticByteArrayMatcher(const char (&)[N] pattern = N)

Detailed Description

This class is useful when you have a sequence of bytes that you want to repeatedly match against some byte arrays (perhaps in a loop), or when you want to search for the same sequence of bytes multiple times in the same byte array. Using a matcher object and indexIn() is faster than matching a plain QByteArray with QByteArray::indexOf(), in particular if repeated matching takes place.

Unlike QByteArrayMatcher, this class calculates the internal representation at compile-time, if your compiler supports C++14-level constexpr (C++11 is not sufficient), so it can even benefit if you are doing one-off byte array matches.

Create the QStaticByteArrayMatcher by calling qMakeStaticByteArrayMatcher(), passing it the C string literal you want to search for. Store the return value of that function in a static const auto variable, so you don't need to pass the N template parameter explicitly:

static const auto matcher = qMakeStaticByteArrayMatcher("needle");

Then call indexIn() on the QByteArray in which you want to search, just like with QByteArrayMatcher.

Since this class is designed to do all the up-front calculations at compile-time, it does not offer a setPattern() method.

Note: Qt detects the necessary C++14 compiler support by way of the feature test recommendations from C++ Committee's Standing Document 6.

See also QByteArrayMatcher and QStringMatcher.

Member Function Documentation

int QStaticByteArrayMatcher::indexIn(const QByteArray &haystack, int from = 0) const

Searches the char string haystack, from byte position from (default 0, i.e. from the first byte), for the byte array pattern() that was set in the constructor.

Returns the position where the pattern() matched in haystack, or -1 if no match was found.

int QStaticByteArrayMatcher::indexIn(const char *haystack, int hlen, int from = 0) const

Searches the char string haystack, which has length hlen, from byte position from (default 0, i.e. from the first byte), for the byte array pattern() that was set in the constructor.

Returns the position where the pattern() matched in haystack, or -1 if no match was found.

QByteArray QStaticByteArrayMatcher::pattern() const

Returns the byte array pattern that this byte array matcher will search for.

See also QByteArrayMatcher::setPattern().

Related Non-Members

[since 5.9] template <uint N> QStaticByteArrayMatcher<N> qMakeStaticByteArrayMatcher(const char (&)[N] pattern = N)

Return a QStaticByteArrayMatcher with the correct N determined automatically from the pattern passed.

To take full advantage of this function, assign the result to an auto variable:

static const auto matcher = qMakeStaticByteArrayMatcher("needle");

This function was introduced in Qt 5.9.

© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-6.0/qstaticbytearraymatcher.html