pub struct StackArrayDeque<T, const N: usize> { /* private fields */ }
Expand description
A fixed-capacity, stack-allocated double-ended queue backed by a circular buffer.
StackArrayDeque<T, N>
stores up to N
elements inline on the stack with no heap
allocation. All insertions and removals at either end run in O(1) time. Once full,
further push_back
calls will overwrite the oldest front element, and
push_front
calls will overwrite the oldest back element (FIFO overwrite behavior).
§Examples
use array_deque::StackArrayDeque;
let mut dq: StackArrayDeque<i32, 3> = StackArrayDeque::new();
dq.push_back(10);
dq.push_back(20);
dq.push_front(5);
assert_eq!(dq.len(), 3);
assert_eq!(dq[0], 5);
assert_eq!(dq[2], 20);
// Overflow: overwrites the front (5)
dq.push_back(30);
assert_eq!(dq.pop_front(), Some(10));
Implementations§
Source§impl<T, const N: usize> StackArrayDeque<T, N>
impl<T, const N: usize> StackArrayDeque<T, N>
Sourcepub const fn new() -> Self
pub const fn new() -> Self
Creates a new empty StackArrayDeque
.
§Examples
use array_deque::StackArrayDeque;
let deque: StackArrayDeque<i32, 10> = StackArrayDeque::new();
assert_eq!(deque.capacity(), 10);
assert!(deque.is_empty());
Sourcepub fn push_back(&mut self, value: T)
pub fn push_back(&mut self, value: T)
Appends an element to the back of the deque.
If the deque is at capacity, this will overwrite the front element and advance the front pointer.
§Arguments
value
- The element to append
§Examples
use array_deque::StackArrayDeque;
let mut deque: StackArrayDeque<i32, 3> = StackArrayDeque::new();
deque.push_back(1);
deque.push_back(2);
assert_eq!(deque.len(), 2);
Sourcepub fn push_front(&mut self, value: T)
pub fn push_front(&mut self, value: T)
Prepends an element to the front of the deque.
If the deque is at capacity, this will overwrite the back element.
§Arguments
value
- The element to prepend
§Examples
use array_deque::StackArrayDeque;
let mut deque: StackArrayDeque<i32, 3> = StackArrayDeque::new();
deque.push_front(1);
deque.push_front(2);
assert_eq!(deque[0], 2);
assert_eq!(deque[1], 1);
Sourcepub fn pop_back(&mut self) -> Option<T>
pub fn pop_back(&mut self) -> Option<T>
Removes and returns the last element from the deque.
§Returns
Some(T)
if the deque is not empty, None
otherwise.
§Examples
use array_deque::StackArrayDeque;
let mut deque: StackArrayDeque<i32, 3> = StackArrayDeque::new();
deque.push_back(1);
deque.push_back(2);
assert_eq!(deque.pop_back(), Some(2));
assert_eq!(deque.pop_back(), Some(1));
assert_eq!(deque.pop_back(), None);
Sourcepub fn pop_front(&mut self) -> Option<T>
pub fn pop_front(&mut self) -> Option<T>
Removes and returns the first element from the deque.
§Returns
Some(T)
if the deque is not empty, None
otherwise.
§Examples
use array_deque::StackArrayDeque;
let mut deque: StackArrayDeque<i32, 3> = StackArrayDeque::new();
deque.push_back(1);
deque.push_back(2);
assert_eq!(deque.pop_front(), Some(1));
assert_eq!(deque.pop_front(), Some(2));
assert_eq!(deque.pop_front(), None);
Sourcepub fn front(&self) -> Option<&T>
pub fn front(&self) -> Option<&T>
Returns a reference to the front element without removing it.
§Examples
use array_deque::StackArrayDeque;
let mut dq: StackArrayDeque<i32, 3> = StackArrayDeque::new();
assert_eq!(dq.front(), None);
dq.push_back(42);
assert_eq!(dq.front(), Some(&42));
Sourcepub fn back(&self) -> Option<&T>
pub fn back(&self) -> Option<&T>
Returns a reference to the back element without removing it.
§Examples
use array_deque::StackArrayDeque;
let mut dq: StackArrayDeque<i32, 3> = StackArrayDeque::new();
dq.push_back(1);
dq.push_back(2);
assert_eq!(dq.back(), Some(&2));
Sourcepub fn iter(&self) -> impl Iterator<Item = &T>
pub fn iter(&self) -> impl Iterator<Item = &T>
Returns an iterator over the elements of the deque.
The iterator yields elements from front to back.
§Examples
use array_deque::StackArrayDeque;
let mut deque: StackArrayDeque<i32, 3> = StackArrayDeque::new();
deque.push_back(1);
deque.push_back(2);
deque.push_back(3);
let mut iter = deque.iter();
assert_eq!(iter.next(), Some(&1));
assert_eq!(iter.next(), Some(&2));
assert_eq!(iter.next(), Some(&3));
assert_eq!(iter.next(), None);
Sourcepub const fn capacity(&self) -> usize
pub const fn capacity(&self) -> usize
Returns the maximum capacity of the deque.
§Examples
use array_deque::StackArrayDeque;
let deque: StackArrayDeque<i32, 10> = StackArrayDeque::new();
assert_eq!(deque.capacity(), 10);
Sourcepub const fn len(&self) -> usize
pub const fn len(&self) -> usize
Returns the number of elements currently in the deque.
§Examples
use array_deque::StackArrayDeque;
let mut deque: StackArrayDeque<i32, 3> = StackArrayDeque::new();
assert_eq!(deque.len(), 0);
deque.push_back(1);
assert_eq!(deque.len(), 1);
Sourcepub const fn is_empty(&self) -> bool
pub const fn is_empty(&self) -> bool
Returns true
if the deque contains no elements.
§Examples
use array_deque::StackArrayDeque;
let mut deque: StackArrayDeque<i32, 3> = StackArrayDeque::new();
assert!(deque.is_empty());
deque.push_back(1);
assert!(!deque.is_empty());
Sourcepub const fn is_full(&self) -> bool
pub const fn is_full(&self) -> bool
Returns true
if the deque has reached its maximum capacity.
§Examples
use array_deque::StackArrayDeque;
let mut deque: StackArrayDeque<i32, 2> = StackArrayDeque::new();
assert!(!deque.is_full());
deque.push_back(1);
deque.push_back(2);
assert!(deque.is_full());
Sourcepub fn clear(&mut self)
pub fn clear(&mut self)
Removes all elements from the deque.
This operation properly drops all contained elements and resets the deque to an empty state.
§Examples
use array_deque::StackArrayDeque;
let mut deque: StackArrayDeque<i32, 3> = StackArrayDeque::new();
deque.push_back(1);
deque.push_back(2);
deque.clear();
assert!(deque.is_empty());
assert_eq!(deque.len(), 0);
Trait Implementations§
Source§impl<T, const N: usize> Default for StackArrayDeque<T, N>
impl<T, const N: usize> Default for StackArrayDeque<T, N>
Source§impl<'de, T: Deserialize<'de>, const N: usize> Deserialize<'de> for StackArrayDeque<T, N>
impl<'de, T: Deserialize<'de>, const N: usize> Deserialize<'de> for StackArrayDeque<T, N>
Source§fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>where
D: Deserializer<'de>,
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>where
D: Deserializer<'de>,
Deserializes a sequence into a StackArrayDeque
, erroring if it exceeds capacity.
Source§impl<T, const N: usize> Drop for StackArrayDeque<T, N>
impl<T, const N: usize> Drop for StackArrayDeque<T, N>
Source§impl<T, const N: usize> Extend<T> for StackArrayDeque<T, N>
impl<T, const N: usize> Extend<T> for StackArrayDeque<T, N>
Source§fn extend<I: IntoIterator<Item = T>>(&mut self, iter: I)
fn extend<I: IntoIterator<Item = T>>(&mut self, iter: I)
Extends the deque with items from an iterator, pushing to the back.
§Examples
use array_deque::StackArrayDeque;
let mut dq: StackArrayDeque<i32, 5> = StackArrayDeque::new();
dq.extend([1,2,3]);
assert_eq!(dq.len(), 3);
Source§fn extend_one(&mut self, item: A)
fn extend_one(&mut self, item: A)
extend_one
)Source§fn extend_reserve(&mut self, additional: usize)
fn extend_reserve(&mut self, additional: usize)
extend_one
)Source§impl<T, const N: usize> FromIterator<T> for StackArrayDeque<T, N>
impl<T, const N: usize> FromIterator<T> for StackArrayDeque<T, N>
Source§fn from_iter<I: IntoIterator<Item = T>>(iter: I) -> Self
fn from_iter<I: IntoIterator<Item = T>>(iter: I) -> Self
Creates a deque by collecting an iterator into its back, up to capacity.
§Examples
use array_deque::StackArrayDeque;
let dq: StackArrayDeque<_, 4> = (0..3).collect();
assert_eq!(dq.len(), 3);