1// Copyright (C) 2020 The Qt Company Ltd.
2// Copyright (C) 2019 Mail.ru Group.
3// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
4// Qt-Security score:significant reason:trivial-impl-only
5
6#ifndef QSTRINGMATCHER_H
7#define QSTRINGMATCHER_H
8
9#include <QtCore/qstring.h>
10#include <QtCore/qstringview.h>
11
12QT_BEGIN_NAMESPACE
13
14
15class QStringMatcherPrivate;
16
17class Q_CORE_EXPORT QStringMatcher
18{
19 void updateSkipTable();
20public:
21 QStringMatcher() = default;
22 explicit QStringMatcher(const QString &pattern,
23 Qt::CaseSensitivity cs = Qt::CaseSensitive);
24 QStringMatcher(const QChar *uc, qsizetype len,
25 Qt::CaseSensitivity cs = Qt::CaseSensitive)
26 : QStringMatcher(QStringView(uc, len), cs)
27 {}
28 QStringMatcher(QStringView pattern,
29 Qt::CaseSensitivity cs = Qt::CaseSensitive);
30 QStringMatcher(const QStringMatcher &other);
31 ~QStringMatcher();
32
33 QStringMatcher &operator=(const QStringMatcher &other);
34
35 void setPattern(const QString &pattern);
36 void setCaseSensitivity(Qt::CaseSensitivity cs);
37
38 qsizetype indexIn(const QString &str, qsizetype from = 0) const
39 { return indexIn(str: QStringView(str), from); }
40 qsizetype indexIn(const QChar *str, qsizetype length, qsizetype from = 0) const
41 { return indexIn(str: QStringView(str, length), from); }
42 qsizetype indexIn(QStringView str, qsizetype from = 0) const;
43 QString pattern() const;
44 QStringView patternView() const noexcept
45 { return q_sv; }
46
47 inline Qt::CaseSensitivity caseSensitivity() const { return q_cs; }
48
49private:
50 QStringMatcherPrivate *d_ptr = nullptr;
51 Qt::CaseSensitivity q_cs = Qt::CaseSensitive;
52 QString q_pattern;
53 QStringView q_sv;
54 uchar q_skiptable[256] = {};
55};
56
57QT_END_NAMESPACE
58
59#endif // QSTRINGMATCHER_H
60

source code of qtbase/src/corelib/text/qstringmatcher.h