dag_scheduler/
nodes.rs

1// use crossbeam::channel::{Receiver, Sender};
2
3
4// pub trait TNode {
5//     type Value;
6//     fn name(&self) -> &String;
7//     fn num_workers(&self) -> usize;
8//     fn channel_caps(&self) -> &Vec<usize>;
9
10//     fn work(&self, receivers: Vec<Receiver<Self::Value>>, senders: Vec<Sender<Self::Value>>);
11
12// }
13
14// pub struct CommonNode<Ctx> {
15//     name: String,
16//     num_workers: usize,
17//     channel_caps: Vec<usize>,
18//     work_core: fn(receivers: Vec<Receiver<Ctx>>, senders: Vec<Sender<Ctx>>)
19// }
20
21// impl<Ctx: Send> CommonNode <Ctx> {
22//     pub fn new(name: &str, num_workers: usize, channel_caps: &[usize], 
23//         work_core: fn(receivers: Vec<Receiver<Ctx>>, senders: Vec<Sender<Ctx>>)) -> Self {
24
25//         CommonNode { 
26//             name: name.to_string(), 
27//             num_workers,
28//             channel_caps: channel_caps.to_vec(),
29//             work_core
30//         }
31//     }
32// }
33
34// impl <Ctx: Send> TNode for CommonNode<Ctx> {
35//     type Value = Ctx;
36//     fn name(&self) -> &String {
37//         &self.name    
38//     }
39
40//     fn num_workers(&self) -> usize {
41//         self.num_workers
42//     }
43//     fn channel_caps(&self) -> &Vec<usize> {
44//         &self.channel_caps
45//     }
46
47//     fn work(&self, receivers: Vec<Receiver<Self::Value>>, senders: Vec<Sender<Self::Value>>) {
48//         (self.work_core)(receivers, senders);
49//     }
50
51// }