use spin::Mutex;
use std::sync::Arc;
use std::mem;
pub fn channel<T>() -> (Sender<T>, Receiver<T>) {
let end = Arc::new(Mutex::new(Vec::new()));
(Sender {
inner: end.clone(),
}, Receiver {
inner: end,
})
}
pub struct Sender<T> {
inner: Arc<Mutex<Vec<T>>>,
}
impl<T> Sender<T> {
pub fn send(&self, item: T) {
self.inner.lock().push(item);
}
}
pub struct Receiver<T> {
inner: Arc<Mutex<Vec<T>>>,
}
impl<T> Receiver<T> {
pub fn recv_all(&self) -> Vec<T> {
mem::replace(&mut *self.inner.lock(), Vec::new())
}
}