diff --git a/src/collections/mpmc_queue.rs b/src/collections/mpmc_queue.rs new file mode 100644 index 0000000000000000000000000000000000000000..41e21da3830e9feef648a4f20eb70e05716045fc --- /dev/null +++ b/src/collections/mpmc_queue.rs @@ -0,0 +1,31 @@ +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 { + queue: Mutex>, +} + +impl MpmcQueue { + 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 { + let mut queue = self.queue.lock().unwrap(); + return queue.pop_front(); + } +} \ No newline at end of file