Skip to content

Commit b0ddc49

Browse files
committed
use static to avoid recreating Finder every time
1 parent 3b7021e commit b0ddc49

File tree

1 file changed

+16
-2
lines changed

1 file changed

+16
-2
lines changed

filtergen/src/utils.rs

+16-2
Original file line numberDiff line numberDiff line change
@@ -154,8 +154,15 @@ pub(crate) fn binary_to_tokens(
154154
}
155155
BinOp::Contains => {
156156
let val_lit = syn::LitStr::new(text, Span::call_site());
157+
158+
let finder_name = format!("FINDER{}", statics.len());
159+
let finder_ident = Ident::new(&finder_name, Span::call_site());
160+
let lazy_finder = quote! {
161+
static ref #finder_ident: memchr::memmem::Finder<'static> = memchr::memmem::Finder::new(#val_lit.as_bytes());
162+
};
163+
statics.push(lazy_finder);
157164
quote! {
158-
memchr::memmem::Finder::new(#val_lit.as_bytes()).find(#proto.#field().as_bytes()).is_some()
165+
#finder_ident.find(#proto.#field().as_bytes()).is_some()
159166
}
160167
}
161168
_ => panic!("Invalid binary operation `{}` for value: `{}`.", op, value),
@@ -170,8 +177,15 @@ pub(crate) fn binary_to_tokens(
170177
}
171178
BinOp::Contains => {
172179
let bytes_lit = syn::LitByteStr::new(b, Span::call_site());
180+
181+
let finder_name = format!("FINDER{}", statics.len());
182+
let finder_ident = Ident::new(&finder_name, Span::call_site());
183+
let lazy_finder = quote! {
184+
static ref #finder_ident: memchr::memmem::Finder<'static> = memchr::memmem::Finder::new(#bytes_lit);
185+
};
186+
statics.push(lazy_finder);
173187
quote! {
174-
memchr::memmem::Finder::new(#bytes_lit).find(#proto.#field().as_ref()).is_some()
188+
#finder_ident.find(#proto.#field().as_ref()).is_some()
175189
}
176190
}
177191
_ => panic!("Invalid binary operation `{}` for value: `{}`.", op, value),

0 commit comments

Comments
 (0)