From dd79a0d991267ea33305be73d3826a02fab04a7c Mon Sep 17 00:00:00 2001 From: Jacinta Ferrant Date: Thu, 18 Jun 2026 21:44:26 -0700 Subject: [PATCH] fix(rust): stop allocating covered_indices on the common success path Signed-off-by: Jacinta Ferrant --- rust/src/pattern_prefilter.rs | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/rust/src/pattern_prefilter.rs b/rust/src/pattern_prefilter.rs index f1c377547a4..a23860b0b1f 100644 --- a/rust/src/pattern_prefilter.rs +++ b/rust/src/pattern_prefilter.rs @@ -1,3 +1,5 @@ +use std::collections::HashSet; + use pyo3::pyclass; use pyo3::pymethods; use regex::{RegexBuilder, RegexSet, RegexSetBuilder}; @@ -28,15 +30,11 @@ impl PatternPrefilter { #[pyo3::pyfunction] pub fn build_pattern_prefilter(patterns: Vec) -> (PatternPrefilter, Vec) { let mut covered_sources: Vec<&str> = Vec::new(); - let mut covered_indices: Vec = Vec::new(); let mut rejected_indices: Vec = Vec::new(); for (index, source) in patterns.iter().enumerate() { match RegexBuilder::new(source).case_insensitive(true).build() { - Ok(_) => { - covered_sources.push(source); - covered_indices.push(index); - } + Ok(_) => covered_sources.push(source), Err(_) => rejected_indices.push(index), } } @@ -56,7 +54,8 @@ pub fn build_pattern_prefilter(patterns: Vec) -> (PatternPrefilter, Vec< rejected_indices, ), Err(_) => { - rejected_indices.extend(covered_indices); + let already_rejected: HashSet = rejected_indices.iter().copied().collect(); + rejected_indices.extend((0..patterns.len()).filter(|i| !already_rejected.contains(i))); (PatternPrefilter { regex_set: None }, rejected_indices) } }