pinned_deque/
intf.rs

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}