Skip to content

Commit 32d3d2e

Browse files
committed
Removed NetworkFilter direct deps from RegexManager.
1 parent a175114 commit 32d3d2e

File tree

1 file changed

+22
-11
lines changed

1 file changed

+22
-11
lines changed

src/regex_manager.rs

Lines changed: 22 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
//! the [`crate::Engine`], infrequently used regexes can be discarded. The [`RegexManager`] is
33
//! responsible for managing the storage of regexes used by filters.
44
5-
use crate::filters::network::{NetworkFilter, NetworkFilterMaskHelper};
5+
use crate::filters::network::{NetworkFilterMask, NetworkFilterMaskHelper};
66

77
use regex::{
88
bytes::Regex as BytesRegex, bytes::RegexBuilder as BytesRegexBuilder,
@@ -148,12 +148,15 @@ impl Default for RegexManager {
148148
}
149149
}
150150

151-
fn make_regexp(filter: &NetworkFilter) -> CompiledRegex {
151+
fn make_regexp<'a, FiltersIter>(mask: NetworkFilterMask, filters: FiltersIter) -> CompiledRegex
152+
where
153+
FiltersIter: Iterator<Item = &'a str> + ExactSizeIterator,
154+
{
152155
compile_regex(
153-
filter.filter.iter(),
154-
filter.is_right_anchor(),
155-
filter.is_left_anchor(),
156-
filter.is_complete_regex(),
156+
filters,
157+
mask.is_right_anchor(),
158+
mask.is_left_anchor(),
159+
mask.is_complete_regex(),
157160
)
158161
}
159162

@@ -236,11 +239,19 @@ where
236239
impl RegexManager {
237240
/// Check whether or not a regex network filter matches a certain URL pattern, using the
238241
/// [`RegexManager`]'s managed regex storage.
239-
pub fn matches(&mut self, filter: &NetworkFilter, pattern: &str) -> bool {
240-
if !filter.is_regex() && !filter.is_complete_regex() {
242+
pub fn matches<'a, FiltersIter>(
243+
&mut self,
244+
mask: NetworkFilterMask,
245+
filters: FiltersIter,
246+
key: u64,
247+
pattern: &str,
248+
) -> bool
249+
where
250+
FiltersIter: Iterator<Item = &'a str> + ExactSizeIterator,
251+
{
252+
if !mask.is_regex() && !mask.is_complete_regex() {
241253
return true;
242254
}
243-
let key = (filter as *const NetworkFilter) as u64;
244255
use std::collections::hash_map::Entry;
245256
match self.map.entry(key) {
246257
Entry::Occupied(mut e) => {
@@ -249,15 +260,15 @@ impl RegexManager {
249260
v.last_used = self.now;
250261
if v.regex.is_none() {
251262
// A discarded entry, recreate it:
252-
v.regex = Some(make_regexp(filter));
263+
v.regex = Some(make_regexp(mask, filters));
253264
self.compiled_regex_count += 1;
254265
}
255266
return v.regex.as_ref().unwrap().is_match(pattern);
256267
}
257268
Entry::Vacant(e) => {
258269
self.compiled_regex_count += 1;
259270
let new_entry = RegexEntry {
260-
regex: Some(make_regexp(filter)),
271+
regex: Some(make_regexp(mask, filters)),
261272
last_used: self.now,
262273
usage_count: 1,
263274
};

0 commit comments

Comments
 (0)