math/
math.rs

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
46//Note graph:
47//     default 1.0 -|add1|--\   1.0 -|add2| ----|printer|
48//  from main 2.0  -|    |   \-------|    |     |       |
49//
50//
51fn 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    //Should execute since the other edge is set by the default value
62    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}