offset_vec/vec_like/
smallvec_impl.rs1use 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}