#[cfg(feature = "std")]
use std::collections::{LinkedList, VecDeque};
pub trait Deque<T> {
#[must_use]
fn len(&self) -> usize;
fn pop_front(&mut self) -> Option<T>;
fn pop_back(&mut self) -> Option<T>;
fn push_front(&mut self, value: T);
fn push_back(&mut self, value: T);
#[must_use]
fn is_empty(&self) -> bool {
self.len() == 0
}
}
#[cfg(feature = "std")]
impl<T> Deque<T> for VecDeque<T> {
#[inline]
fn len(&self) -> usize {
Self::len(self)
}
#[inline]
fn pop_front(&mut self) -> Option<T> {
Self::pop_front(self)
}
#[inline]
fn pop_back(&mut self) -> Option<T> {
Self::pop_back(self)
}
#[inline]
fn push_front(&mut self, value: T) {
Self::push_front(self, value);
}
#[inline]
fn push_back(&mut self, value: T) {
Self::push_back(self, value);
}
}
#[cfg(feature = "std")]
impl<T> Deque<T> for LinkedList<T> {
#[inline]
fn len(&self) -> usize {
Self::len(self)
}
#[inline]
fn pop_front(&mut self) -> Option<T> {
Self::pop_front(self)
}
#[inline]
fn pop_back(&mut self) -> Option<T> {
Self::pop_back(self)
}
#[inline]
fn push_front(&mut self, value: T) {
Self::push_front(self, value);
}
#[inline]
fn push_back(&mut self, value: T) {
Self::push_back(self, value);
}
}