offset_vec/vec_like/
smallvec_impl.rs

1use smallvec::{Array, SmallVec};
2use super::*;
3
4impl<A: Array> VecLike for SmallVec<A> {
5    type Elem = A::Item;
6    type Slice = [A::Item];
7    type Collection = SmallVec<A>;
8    type Drain<'a> = smallvec::Drain<'a, A> where Self: 'a;
9
10    #[inline]
11    fn len(&self) -> usize {
12        self.len()
13    }
14
15    #[inline]
16    fn is_empty(&self) -> bool {
17        self.is_empty()
18    }
19
20    fn as_slice(&self) -> &[Self::Elem] {
21        self
22    }
23
24    fn as_mut_slice(&mut self) -> &mut [Self::Elem] {
25        self
26    }
27
28    fn as_mut_collection(&mut self) -> &mut Self::Collection {
29        self
30    }
31
32    fn capacity(&self) -> usize {
33        self.capacity()
34    }
35
36    fn pop(&mut self) -> Option<Self::Elem> {
37        self.pop()
38    }
39
40    #[track_caller]
41    fn push(&mut self, value: Self::Elem) {
42        self.push(value);
43    }
44
45    #[track_caller]
46    fn remove(&mut self, index: usize) -> Self::Elem {
47        self.remove(index)
48    }
49
50    fn insert(&mut self, index: usize, element: Self::Elem) {
51        self.insert(index, element);
52    }
53
54    #[track_caller]
55    fn reserve(&mut self, additional: usize) {
56        self.reserve(additional)
57    }
58
59    #[track_caller]
60    fn reserve_exact(&mut self, additional: usize) {
61        self.reserve_exact(additional)
62    }
63
64    #[track_caller]
65    fn shrink_to_fit(&mut self) {
66        self.shrink_to_fit()
67    }
68
69    fn truncate(&mut self, len: usize) {
70        self.truncate(len);
71    }
72
73    #[track_caller]
74    fn resize(&mut self, new_len: usize, value: Self::Elem)
75    where Self::Elem: Clone,
76    {
77        self.resize(new_len, value);
78    }
79
80    #[track_caller]
81    fn resize_with<F>(&mut self, new_len: usize, f: F)
82    where F: FnMut() -> Self::Elem,
83    {
84        self.resize_with(new_len, f);
85    }
86
87    fn drain<R>(&mut self, range: R) -> Self::Drain<'_>
88    where R: RangeBounds<usize>,
89    {
90        self.drain(range)
91    }
92
93    fn clear(&mut self) {
94        self.clear();
95    }
96
97    #[track_caller]
98    fn append(&mut self, other: &mut Self::Collection) {
99        self.append(other);
100    }
101}
102impl<A: Array> VecLikeSolid for SmallVec<A> {
103    fn swap_remove(&mut self, index: usize) -> Self::Elem {
104        self.swap_remove(index)
105    }
106
107    fn retain_mut<F>(&mut self, f: F)
108    where F: FnMut(&mut Self::Elem) -> bool,
109    {
110        self.retain_mut(f);
111    }
112
113    fn pop_if<F>(&mut self, predicate: F) -> Option<Self::Elem>
114    where F: FnOnce(&mut Self::Elem) -> bool,
115    {
116        let last = self.last_mut()?;
117        if predicate(last) { self.pop() } else { None }
118    }
119}