use core::fmt;
use super::{Array, Deque, Storage};
#[cfg(feature = "alloc")]
use crate::mem::Boxed;
impl<T: Clone, S: Storage, const CAP: usize> Clone for Deque<T, S, CAP>
where
S::Stored<[T; CAP]>: Clone,
{
fn clone(&self) -> Self {
Self {
array: self.array.clone(),
front: self.front,
back: self.back,
len: self.len,
}
}
}
impl<T: Copy, S: Storage, const CAP: usize> Copy for Deque<T, S, CAP> where S::Stored<[T; CAP]>: Copy
{}
impl<T: fmt::Debug, S: Storage, const CAP: usize> fmt::Debug for Deque<T, S, CAP>
where
S::Stored<[T; CAP]>: fmt::Debug,
{
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
let mut debug = f.debug_struct(stringify![DirectDeque]);
debug
.field("CAP", &CAP)
.field("len", &self.len)
.field("front", &self.front)
.field("back", &self.back);
if CAP <= 6 {
debug.field("nodes", &self.array);
} else {
debug.field("array { ... }", &());
}
debug.finish()
}
}
impl<T: PartialEq, S: Storage, const CAP: usize> PartialEq for Deque<T, S, CAP>
where
S::Stored<[T; CAP]>: PartialEq,
{
fn eq(&self, other: &Self) -> bool {
self.array == other.array
&& self.len == other.len
&& self.front == other.front
&& self.back == other.back
}
}
impl<T: Eq, S: Storage, const CAP: usize> Eq for Deque<T, S, CAP> where S::Stored<[T; CAP]>: Eq {}
impl<T: Default, const CAP: usize> Default for Deque<T, (), CAP> {
fn default() -> Self {
Self {
array: Array::default(),
front: 0,
back: 0,
len: 0,
}
}
}
#[cfg(feature = "alloc")]
impl<T: Default, const CAP: usize> Default for Deque<T, Boxed, CAP> {
fn default() -> Self {
Self {
array: Array::default(),
front: 0,
back: 0,
len: 0,
}
}
}
impl<T: Default, I, const CAP: usize> From<I> for Deque<T, (), CAP>
where
I: IntoIterator<Item = T>,
{
fn from(iterator: I) -> Deque<T, (), CAP> {
let mut s = Deque::<T, (), CAP>::default();
let _ = s.extend_back(iterator);
s
}
}
#[cfg(feature = "alloc")]
impl<T: Default, I, const CAP: usize> From<I> for Deque<T, Boxed, CAP>
where
I: IntoIterator<Item = T>,
{
fn from(iterator: I) -> Deque<T, Boxed, CAP> {
let mut s = Deque::<T, Boxed, CAP>::default();
let _ = s.extend_back(iterator);
s
}
}