offset_vec/vec_like/
vec_impl.rs

1use core::ops::RangeBounds;
2use alloc::vec::{Drain, Vec};
3use super::*;
4
5impl<T> VecLike for Vec<T> {
6    type Elem = T;
7    type Slice = [T];
8    type Collection = Vec<T>;
9    type Drain<'a> = Drain<'a, T> 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(&mut self, min_capacity: usize) {
67        self.shrink_to(min_capacity)
68    }
69
70    #[track_caller]
71    fn shrink_to_fit(&mut self) {
72        self.shrink_to_fit()
73    }
74
75    fn truncate(&mut self, len: usize) {
76        self.truncate(len);
77    }
78
79    #[track_caller]
80    fn split_off(&mut self, at: usize) -> Self::Collection {
81        self.split_off(at)
82    }
83
84    #[track_caller]
85    fn resize(&mut self, new_len: usize, value: Self::Elem)
86    where Self::Elem: Clone,
87    {
88        self.resize(new_len, value);
89    }
90
91    #[track_caller]
92    fn resize_with<F>(&mut self, new_len: usize, f: F)
93    where F: FnMut() -> Self::Elem,
94    {
95        self.resize_with(new_len, f);
96    }
97
98    fn drain<R>(&mut self, range: R) -> Self::Drain<'_>
99    where R: RangeBounds<usize>,
100    {
101        self.drain(range)
102    }
103
104    fn clear(&mut self) {
105        self.clear();
106    }
107
108    #[track_caller]
109    fn append(&mut self, other: &mut Self::Collection) {
110        self.append(other);
111    }
112}
113impl<T> VecLikeSolid for Vec<T> {
114    fn swap_remove(&mut self, index: usize) -> Self::Elem {
115        self.swap_remove(index)
116    }
117
118    fn retain<F>(&mut self, f: F)
119    where F: FnMut(&Self::Elem) -> bool,
120    {
121        self.retain(f);
122    }
123
124    fn retain_mut<F>(&mut self, f: F)
125    where F: FnMut(&mut Self::Elem) -> bool,
126    {
127        self.retain_mut(f);
128    }
129
130    fn pop_if<F>(&mut self, predicate: F) -> Option<Self::Elem>
131    where F: FnOnce(&mut Self::Elem) -> bool,
132    {
133        self.pop_if(predicate)
134    }
135}