pub trait Deque<T>: Default {
fn push_back(&mut self, item: T);
fn pop_front(&mut self) -> Option<T>;
fn clear(&mut self);
fn is_empty(&self) -> bool;
}
#[cfg(feature = "alloc")]
impl<T> Deque<T> for alloc::collections::VecDeque<T> {
fn push_back(&mut self, value: T) {
alloc::collections::VecDeque::push_back(self, value);
}
fn pop_front(&mut self) -> Option<T> {
alloc::collections::VecDeque::pop_front(self)
}
fn clear(&mut self) {
alloc::collections::VecDeque::clear(self)
}
fn is_empty(&self) -> bool {
alloc::collections::VecDeque::is_empty(self)
}
}
impl<T, const N: usize> Deque<T> for heapless::Deque<T, N> {
fn push_back(&mut self, value: T) {
if heapless::Deque::push_back(self, value).is_err() {
panic!("push past allocated capacity")
}
}
fn pop_front(&mut self) -> Option<T> {
heapless::Deque::pop_front(self)
}
fn clear(&mut self) {
heapless::Deque::clear(self)
}
fn is_empty(&self) -> bool {
heapless::Deque::is_empty(self)
}
}