1use crate::{air::SP1AirBuilder, InteractionKind};
2use hashbrown::HashMap;
3use slop_algebra::AbstractField;
4
5pub trait MachineRecord: Default + Sized + Send + Sync + Clone {
7 fn stats(&self) -> HashMap<String, usize>;
9
10 fn append(&mut self, other: &mut Self);
12
13 fn public_values<F: AbstractField>(&self) -> Vec<F>;
15
16 fn eval_public_values<AB: SP1AirBuilder>(builder: &mut AB);
21
22 fn interactions_in_public_values() -> Vec<InteractionKind>;
25}
26
27impl MachineRecord for Vec<(u32, u32, u32)> {
29 fn stats(&self) -> HashMap<String, usize> {
30 let mut map = HashMap::new();
31 map.insert("num_addi".to_string(), self.len());
32 map
33 }
34
35 fn append(&mut self, other: &mut Self) {
36 self.append(other);
37 }
38
39 fn public_values<F: AbstractField>(&self) -> Vec<F> {
40 vec![]
41 }
42
43 fn eval_public_values<AB: SP1AirBuilder>(_builder: &mut AB) {}
44
45 fn interactions_in_public_values() -> Vec<InteractionKind> {
46 vec![]
47 }
48}