Skip to content

Commit 2215ca3

Browse files
committed
Use reference counted scheme instead of references
This allows to remove the `'s` lifetime in most of the codebase which should also simplify the life of wirefilter users. It also enables downstream crates to implement deserialization of filter AST with serde using TLS stored scheme or similar tricks.
1 parent 3054789 commit 2215ca3

File tree

25 files changed

+1147
-792
lines changed

25 files changed

+1147
-792
lines changed

engine/benches/bench.rs

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ static A: System = System;
88
use criterion::{criterion_group, criterion_main, Bencher, Criterion};
99
use std::{borrow::Cow, clone::Clone, fmt::Debug, net::IpAddr};
1010
use wirefilter::{
11-
ExecutionContext, FilterAst, FunctionArgKind, FunctionArgs, GetType, LhsValue, Scheme,
11+
ExecutionContext, FilterAst, FunctionArgKind, FunctionArgs, GetType, LhsValue, SchemeBuilder,
1212
SimpleFunctionDefinition, SimpleFunctionImpl, SimpleFunctionParam, Type,
1313
};
1414

@@ -79,11 +79,12 @@ impl<T: 'static + Copy + Debug + Into<LhsValue<'static>>> FieldBench<'_, T> {
7979
let mut group = c.benchmark_group("parsing");
8080

8181
group.bench_function(name, {
82-
let mut scheme = Scheme::default();
83-
scheme.add_field(field, ty).unwrap();
82+
let mut builder = SchemeBuilder::default();
83+
builder.add_field(field, ty).unwrap();
8484
for (name, function) in functions {
85-
scheme.add_function(name, function.clone()).unwrap();
85+
builder.add_function(name, function.clone()).unwrap();
8686
}
87+
let scheme = builder.build();
8788
move |b: &mut Bencher| {
8889
b.iter(|| scheme.parse(filter).unwrap());
8990
}
@@ -94,11 +95,12 @@ impl<T: 'static + Copy + Debug + Into<LhsValue<'static>>> FieldBench<'_, T> {
9495
let mut group = c.benchmark_group("compilation");
9596

9697
group.bench_function(name, {
97-
let mut scheme = Scheme::default();
98-
scheme.add_field(field, ty).unwrap();
98+
let mut builder = SchemeBuilder::default();
99+
builder.add_field(field, ty).unwrap();
99100
for (name, function) in functions {
100-
scheme.add_function(name, function.clone()).unwrap();
101+
builder.add_function(name, function.clone()).unwrap();
101102
}
103+
let scheme = builder.build();
102104
move |b: &mut Bencher| {
103105
let filter = scheme.parse(filter).unwrap();
104106

@@ -111,11 +113,12 @@ impl<T: 'static + Copy + Debug + Into<LhsValue<'static>>> FieldBench<'_, T> {
111113
let mut group = c.benchmark_group("execution");
112114

113115
group.bench_with_input(name, values, {
114-
let mut scheme = Scheme::default();
115-
scheme.add_field(field, ty).unwrap();
116+
let mut builder = SchemeBuilder::default();
117+
builder.add_field(field, ty).unwrap();
116118
for (name, function) in functions {
117-
scheme.add_function(name, function.clone()).unwrap();
119+
builder.add_function(name, function.clone()).unwrap();
118120
}
121+
let scheme = builder.build();
119122
move |b: &mut Bencher, values: &[T]| {
120123
let filter = scheme.parse(filter).unwrap();
121124

engine/examples/cli.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ fn main() {
1313
.nth(1)
1414
.expect("Expected an input as a command-line argument");
1515

16-
let mut scheme = Scheme! {
16+
let mut builder = Scheme! {
1717
ip: Ip,
1818
str: Bytes,
1919
int: Int,
@@ -23,7 +23,7 @@ fn main() {
2323
bool_arr: Array(Bool),
2424
};
2525

26-
scheme
26+
builder
2727
.add_function(
2828
"panic",
2929
SimpleFunctionDefinition {
@@ -40,6 +40,7 @@ fn main() {
4040
},
4141
)
4242
.unwrap();
43+
let scheme = builder.build();
4344

4445
match scheme.parse(&filter) {
4546
Ok(res) => println!("{res:#?}"),

0 commit comments

Comments
 (0)