perigee/data_structures/
queue.rs

1use serde::{Deserialize, Serialize};
2
3/// A basic queue structure.
4#[derive(Default, Serialize, Deserialize)]
5pub struct Queue<T> {
6    vec: Vec<T>,
7}
8
9impl<T> Queue<T> {
10    pub fn new() -> Self {
11        Queue { vec: Vec::new() }
12    }
13
14    pub fn with_capacity(cap: usize) -> Self {
15        Queue {
16            vec: Vec::with_capacity(cap),
17        }
18    }
19
20    pub fn capacity(&self) -> usize {
21        self.vec.capacity()
22    }
23
24    pub fn size(&self) -> usize {
25        self.vec.len()
26    }
27
28    pub fn enqueue(&mut self, item: T) {
29        self.vec.push(item)
30    }
31
32    pub fn dequeue(&mut self) -> T {
33        self.vec.remove(0)
34    }
35
36    pub fn is_empty(&self) -> bool {
37        self.vec.is_empty()
38    }
39
40    pub fn peek(&self) -> Option<&T> {
41        self.vec.first()
42    }
43}
44
45impl<T: PartialEq> PartialEq for Queue<T> {
46    fn eq(&self, other: &Self) -> bool {
47        PartialEq::eq(&self.vec, &other.vec)
48    }
49}
50
51impl<T: PartialEq> PartialEq<Vec<T>> for Queue<T> {
52    fn eq(&self, other: &Vec<T>) -> bool {
53        PartialEq::eq(&self.vec, other)
54    }
55}
56
57impl<T: Eq> Eq for Queue<T> {}