use std::sync::Mutex;
use std::collections::VecDeque;
/// Generic multiple-producer, multiple-consumer queue. Current implementation
/// has the required functionality, without all of the optimizations.
/// TODO: @Optimize
pub struct MpmcQueue<T: Sized> {
queue: Mutex<VecDeque<T>>,
}
impl<T: Sized> MpmcQueue<T> {
pub fn new() -> Self {
Self::with_capacity(0)
}
pub fn with_capacity(capacity: usize) -> Self {
Self{
queue: Mutex::new(VecDeque::with_capacity(capacity)),
}
}
pub fn push_back(&self, item: T) {
let mut queue = self.queue.lock().unwrap();
queue.push_back(item);
}
pub fn pop_front(&self) -> Option<T> {
let mut queue = self.queue.lock().unwrap();
return queue.pop_front();
}
}