Crate bare_metal_deque

Crate bare_metal_deque 

Source
Expand description

The BareMetalDeque represents a fixed-size double-ended queue analogous to VecDeque. It is implemented internally as a ring buffer.

If you try to add to a full deque, it will panic.

Basic deque operations (push/pop front/back):

use bare_metal_deque::BareMetalDeque;
 
let mut q = BareMetalDeque::<i64, 3>::new();
q.push_back(1);
assert_eq!(q.back().unwrap(), 1);
assert_eq!(q.front().unwrap(), 1);
 
q.push_back(2);
assert_eq!(q.back().unwrap(), 2);
assert_eq!(q.front().unwrap(), 1);
 
q.push_back(3);
assert_eq!(q.back().unwrap(), 3);
assert_eq!(q.front().unwrap(), 1);
assert!(q.is_full());
 
assert_eq!(q.pop_front().unwrap(), 1);
assert_eq!(q.back().unwrap(), 3);
assert_eq!(q.front().unwrap(), 2);
assert!(!q.is_full());
 
q.push_front(4);
assert_eq!(q.back().unwrap(), 3);
assert_eq!(q.front().unwrap(), 4);
assert!(q.is_full());
 
assert_eq!(q.pop_back().unwrap(), 3);
assert_eq!(q.back().unwrap(), 2);
assert_eq!(q.front().unwrap(), 4);
assert!(!q.is_full());
 
q.push_back(5);
assert_eq!(q.back().unwrap(), 5);
assert_eq!(q.front().unwrap(), 4);
assert!(q.is_full());
 
// Indexing
assert_eq!(q[0], 4);
assert_eq!(q[1], 2);
assert_eq!(q[2], 5);
 
// Mutable indexing
q[0] = 6;
assert_eq!(q.pop_front().unwrap(), 6);
assert_eq!(q.back().unwrap(), 5);
assert_eq!(q.front().unwrap(), 2);
assert!(!q.is_full());

Iteration example:

use bare_metal_deque::BareMetalDeque;
 
let mut q = BareMetalDeque::<usize, 5>::new();
for n in 1..=3 {
    q.push_back(n);
}
 
for (i, v) in q.iter().enumerate() {
    assert_eq!(i + 1, *v);
    assert_eq!(q[i], *v);
}

Structsยง

BareMetalDeque