1use std::sync::Arc;
2use std::sync::Mutex;
3
4use dager::edge::Edge;
5use dager::executor::Executor;
6use dager::node::AbstAggregator;
7use dager::node::Aggregator;
8use dager::node::Node;
9
10struct Add;
11impl Node for Add{
12 type InSig = (f32, f32);
13 type OutSig = [f32; 1];
14 fn process(&mut self, input: Self::InSig) -> Self::OutSig {
15 let (a, b) = input;
16 println!("adding: {}+{}", a, b);
17 [a + b]
18 }
19
20 fn default(&mut self, aggregator: &mut dyn AbstAggregator){
21 println!("Setting default of port 0 to 1");
22 aggregator.set_default_value(0, Box::new(1.0 as f32)).expect("Failed to set default");
23 }
24
25 fn name<'a>(&'a self) -> &'a str {
26 "Adder"
27 }
28}
29
30struct Printer;
31impl Node for Printer{
32 type InSig = [f32; 1];
33 type OutSig = [f32; 1];
34 fn process(&mut self, input: Self::InSig) -> Self::OutSig {
35 let [a] = input;
36 println!("Got {}", a);
37 [0.0]
38 }
39
40 fn name<'a>(&'a self) -> &'a str {
41 "Printer"
42 }
43}
44
45
46fn main(){
52 let ex = Executor::new();
53
54 let add_node1 = Arc::new(Mutex::new(Aggregator::from_node(Add)));
55 let add_node2 = Arc::new(Mutex::new(Aggregator::from_node(Add)));
56 let printer = Arc::new(Mutex::new(Aggregator::from_node(Printer)));
57
58 Edge::connect(add_node1.clone(), 0, add_node2.clone(), 1).expect("Failed to connect edge");
59 Edge::connect(add_node2.clone(), 0, printer.clone(), 0).expect("Failed to connect edge");
60
61 add_node1.lock().unwrap().set_in_from_edge(ex.clone(), 1, Box::new(2.0 as f32)).expect("Failed to set input");
63
64 std::thread::sleep(std::time::Duration::from_secs(1));
65}