queued_rust/queues/
mod.rs

1use thiserror::Error;
2
3/// Errors that can occur in a queue.
4#[derive(Error, Debug, PartialEq)]
5pub enum QueueError {
6    /// Indicates that the queue is full.
7    #[error("The queue is full try clearing it before filling it")]
8    Full,
9}
10
11mod reg;    // A regular queue type
12mod sorted; // Queue that can sort its items
13
14pub use reg::Queue;
15pub use sorted::SortedQueue;
16
17pub fn merge_sorted_queues<T>(q1: SortedQueue<T>, q2: SortedQueue<T>, reverse:bool) -> SortedQueue<T> where T: Ord {
18    let mut res_queue = SortedQueue::new(reverse);
19
20    for item in q1 {
21        res_queue.add(item);
22    };
23    for item in q2 {
24        res_queue.add(item);
25    };
26
27    res_queue
28}
29
30pub fn merge_queues<T>(q1: Queue<T>, q2: Queue<T>, reverse: bool) -> Queue<T> {
31    let mut res_queue = Queue::new(reverse);
32
33    for item in q1 {
34        res_queue.add(item);
35    }
36    for item in q2 {
37        res_queue.add(item);
38    }
39
40    res_queue
41}
42
43pub fn queue_to_vec<T>(q: Queue<T>) -> Vec<T> {
44    let mut vec = vec![];
45    for item in q {
46        vec.push(item);
47    }
48    vec
49}
50
51pub fn sorted_queue_to_vec<T>(q: SortedQueue<T>) -> Vec<T> where T: Ord {
52    let mut vec = vec![];
53    for item in q {
54        vec.push(item);
55    }
56    vec
57}