1use crate::*;
2
3impl<T> Default for PinnedDeque<T>
4where
5 T: Sized,
6{
7 fn default() -> Self {
8 Self::new()
9 }
10}
11
12impl<T> std::fmt::Debug for PinnedDeque<T>
13where
14 T: Sized + std::fmt::Debug,
15{
16 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
17 write!(f, "[")?;
18 let mut it = self.iter();
19 if let Some(first) = it.next() {
20 write!(f, "{first:?}")?;
21 for x in it {
22 write!(f, ", {x:?}")?;
23 }
24 }
25 write!(f, "]")?;
26 Ok(())
27 }
28}
29
30impl<T> std::iter::Extend<T> for PinnedDeque<T>
31where
32 T: Sized,
33{
34 fn extend<I: IntoIterator<Item = T>>(&mut self, iter: I) {
35 let iter = iter.into_iter();
36 let (size_hint, _) = iter.size_hint();
37 self.reserve(size_hint);
38 for x in iter {
39 self.push_back(x);
40 }
41 }
42}
43
44impl<'a, T> From<&'a [T]> for PinnedDeque<&'a T>
45where
46 T: Sized,
47{
48 fn from(value: &'a [T]) -> Self {
49 value.iter().collect()
50 }
51}
52
53impl<T, const N: usize> From<[T; N]> for PinnedDeque<T>
54where
55 T: Sized,
56{
57 fn from(value: [T; N]) -> Self {
58 value.into_iter().collect()
59 }
60}
61
62impl<T> From<Vec<T>> for PinnedDeque<T>
63where
64 T: Sized,
65{
66 fn from(value: Vec<T>) -> Self {
67 value.into_iter().collect()
68 }
69}
70
71impl<T> FromIterator<T> for PinnedDeque<T>
72where
73 T: Sized,
74{
75 fn from_iter<I: IntoIterator<Item = T>>(iter: I) -> Self {
76 let iter = iter.into_iter();
77 let (size_hint, _) = iter.size_hint();
78 let mut res = Self::new();
79 res.reserve(size_hint);
80 for x in iter {
81 res.push_back(x);
82 }
83 res
84 }
85}
86
87impl<T> Clone for PinnedDeque<T>
88where
89 T: Sized + Clone,
90{
91 fn clone(&self) -> Self {
92 self.iter().cloned().collect()
93 }
94
95 fn clone_from(&mut self, source: &Self) {
96 self.clear();
97 self.extend(source.iter().cloned());
98 }
99}