21#include <QWebEngineUrlRequestInfo>
41 if (rule->m_type != AdBlockRule::StringContainsMatchRule) {
45 const QString filter = rule->m_matchString;
46 int len = filter.size();
49 qDebug() <<
"AdBlockSearchTree: Inserting rule with filter len <= 0!" << rule->
filter();
55 for (
int i = 0;
i < len; ++
i) {
56 const QChar c = filter.at(
i);
57 Node *next = node->children.value(c);
61 node->children[c] = next;
73 int len = urlString.size();
79 const QChar*
string = urlString.constData();
81 for (
int i = 0;
i < len; ++
i) {
82 const AdBlockRule* rule = prefixSearch(request, domain, urlString,
string++, len -
i);
91const AdBlockRule* AdBlockSearchTree::prefixSearch(
const QWebEngineUrlRequestInfo &request,
const QString &domain,
const QString &urlString,
const QChar*
string,
int len)
const
99 Node* node = m_root->children.value(c);
104 for (
int i = 1;
i < len; ++
i) {
105 const QChar c = (++string)[0];
107 if (node->rule && node->rule->networkMatch(request, domain, urlString)) {
111 node = node->children.value(c);
117 if (node->rule && node->rule->networkMatch(request, domain, urlString)) {
124void AdBlockSearchTree::deleteNode(AdBlockSearchTree::Node* node)
130 QHashIterator<QChar, Node*>
i(node->children);
131 while (
i.hasNext()) {
133 deleteNode(
i.value());
const AdBlockRule * find(const QWebEngineUrlRequestInfo &request, const QString &domain, const QString &urlString) const
bool add(const AdBlockRule *rule)