adding rotating_queue.rs

This commit is contained in:
godmode galactus 2022-09-08 22:09:49 +02:00
parent 7b227d5f69
commit 8020eba325
1 changed files with 33 additions and 0 deletions

33
src/rotating_queue.rs Normal file
View File

@ -0,0 +1,33 @@
use std::{
collections::VecDeque,
sync::{Arc, RwLock},
};
pub struct RotatingQueue<T> {
deque: Arc<RwLock<VecDeque<T>>>,
}
impl<T: Clone> RotatingQueue<T> {
pub fn new<F>(size: usize, creator_functor: F) -> Self
where
F: Fn() -> T,
{
let item = Self {
deque: Arc::new(RwLock::new(VecDeque::<T>::new())),
};
{
let mut deque = item.deque.write().unwrap();
for _i in 0..size {
deque.push_back(creator_functor());
}
}
item
}
pub fn get(&self) -> T {
let mut deque = self.deque.write().unwrap();
let current = deque.pop_front().unwrap();
deque.push_back(current.clone());
current
}
}