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