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// }