Класс QStaticByteArrayMatcher
Класс QStaticByteArrayMatcher — это версия QByteArrayMatcher, вычисляемая на этапе компиляции. Подробнее...
| Заголовок: | #include <QStaticByteArrayMatcher> |
| qmake: | QT += core |
| С момента: | Qt 5.9 |
Открытые функции
| int | indexIn(const QByteArray &haystack, int from = ...) const |
| int | indexIn(const char *haystack, int hlen, int from = ...) const |
| QByteArray | pattern() const |
Связанные нечлены
| QStaticByteArrayMatcher<N> | qMakeStaticByteArrayMatcher(const char (&)[N] pattern = N) |
Подробное описание
Класс QStaticByteArrayMatcher — это версия QByteArrayMatcher, вычисляемая на этапе компиляции.
Этот класс полезен, когда у вас есть последовательность байтов, которую вы хотите многократно сопоставлять с некоторыми массивами байтов (например, в цикле), или когда вы хотите искать ту же последовательность байтов несколько раз в одном и том же массиве байтов. Использование объекта совпадения и indexIn() быстрее, чем сопоставление обычного QByteArray с QByteArray::indexOf(), особенно если происходит многократное сопоставление.
В отличие от QByteArrayMatcher, этот класс вычисляет внутреннее представление на этапе компиляции, если ваш компилятор поддерживает уровень C++14 constexpr (C++11 недостаточно), поэтому он может быть полезен даже при однократном сопоставлении массивов байтов.
Создайте QStaticByteArrayMatcher, вызвав qMakeStaticByteArrayMatcher(), передав ему строку-литерал C, которую вы хотите найти. Сохраните возвращаемое значение этой функции в static const auto переменной, чтобы вам не нужно было явно передавать N шаблонный параметр:
static const auto matcher = qMakeStaticByteArrayMatcher("needle"); Затем вызовите indexIn() для QByteArray, в котором вы хотите выполнить поиск, так же, как и с QByteArrayMatcher.
Поскольку этот класс предназначен для выполнения всех предварительных вычислений на этапе компиляции, он не предлагает метода setPattern().
Примечание: Qt определяет необходимую поддержку компилятора C++14 с помощью рекомендаций по проверке возможностей из руководства комитета C++ по проверке возможностей.
См. также QByteArrayMatcher и QStringMatcher.
Документация по функциям-членам
int QStaticByteArrayMatcher::indexIn(const QByteArray &haystack, int from = ...) const
Ищет в строке символов haystack, начиная с байтовой позиции from (по умолчанию 0, т.е. с первого байта), массив байтов pattern(), заданный в конструкторе.
Возвращает позицию, где pattern() совпал в haystack, или -1, если совпадения не найдено.
int QStaticByteArrayMatcher::indexIn(const char *haystack, int hlen, int from = ...) const
Ищет в строке символов haystack, имеющей длину hlen, начиная с байтовой позиции from (по умолчанию 0, т.е. с первого байта), массив байтов pattern(), заданный в конструкторе.
Возвращает позицию, где pattern() совпал в haystack, или -1, если совпадения не найдено.
QByteArray QStaticByteArrayMatcher::pattern() const
Возвращает массив байтов pattern, который этот соответствие массиву байтов будет искать.
См. также QByteArrayMatcher::setPattern().
Связанные нечлены
QStaticByteArrayMatcher<N> qMakeStaticByteArrayMatcher(const char (&)[N] pattern = N)
Возвращает QStaticByteArrayMatcher с правильным N, автоматически определённым по переданному pattern.
Чтобы в полной мере воспользоваться этой функцией, присвойте результат auto переменной:
static const auto matcher = qMakeStaticByteArrayMatcher("needle"); Эта функция была добавлена в Qt 5.9.
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/archives/qt-5.11/qstaticbytearraymatcher.html