perigee/data_structures/
queue.rs1use serde::{Deserialize, Serialize};
2
3#[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> {}