diff --git a/examples/vec_deque.rs b/examples/vec_deque.rs index 5ac3c948624d9d4aec165af8f794e9cfe2269f43..16d999431507cc482cb897309b8d555744989cf0 100644 --- a/examples/vec_deque.rs +++ b/examples/vec_deque.rs @@ -79,30 +79,23 @@ trait Dispatch { fn dispatch(&mut self); } -// struct MsgQ<'a, T>(VecDeque<&'a Mutex<T>>) -// where -// T: 'a + Dispatch; - -// impl<'a, T> Dispatch for MsgQ<'a, T> -// where -// T: 'a + Dispatch, -// { -// fn dispatch(&mut self) {} -// } - -// impl<'a, T> Dispatch for &'a Vec<Mutex<T>> { -// fn dispatch(&mut self) {} -// } +struct MsgQ<'a>(VecDeque<&'a mut Dispatch>); -struct MsgQ<'a>(VecDeque<&'a Dispatch>); +impl<'a> Dispatch for MsgQ<'a> { + fn dispatch(&mut self) { + println!("MsgQ Dispatch"); -// impl<'a, T> Dispatch for MsgQ<'a, T> { -// fn dispatch(&mut self) {} -// } -struct Msg<T>(Mutex<T>, Box<FnMut(T) -> ()>); + self.0.pop_front().unwrap().dispatch(); + } +} +struct Msg<T>(Mutex<T>, Box<FnMut(&mut T) -> ()>); impl<T> Dispatch for Msg<T> { - fn dispatch(&mut self) {} + fn dispatch(&mut self) { + println!("Msg Dispatch"); + let mut o = self.0.lock().unwrap(); + self.1(&mut *o); + } } impl<T> Dispatch for Mutex<T> { @@ -145,21 +138,18 @@ fn main() { ))); let m = Mutex::new(0); - let m2 = Mutex::new(0.0); - let mut q = MsgQ { - 0: VecDeque::new(), - }; - q.0.push_back(&m); - q.0.push_back(&m2); + let mut q = MsgQ { 0: VecDeque::new() }; + + let c1 = |o: &mut i32| println!("hello {}", o); - let c1 = |o| println!("hello {}", o); - let msg = Msg { + let mut msg = Msg { 0: m, 1: Box::new(c1), }; - q.0.dispatch(); + q.0.push_back(&mut msg); + q.dispatch(); //q.0.push_back(&(m, c1));