cc_traits/impls/alloc/
vec.rs

1use crate::{
2	Capacity, Clear, Collection, CollectionMut, CollectionRef, Get, GetMut, Iter, IterMut, Len,
3	PopBack, PushBack, Remove, Reserve, SimpleCollectionMut, SimpleCollectionRef, WithCapacity,
4};
5use alloc::vec::Vec;
6
7impl<T> Collection for Vec<T> {
8	type Item = T;
9}
10
11impl<T> CollectionRef for Vec<T> {
12	type ItemRef<'a> = &'a T where Self: 'a;
13
14	crate::covariant_item_ref!();
15}
16
17impl<T> CollectionMut for Vec<T> {
18	type ItemMut<'a> = &'a mut T where Self: 'a;
19
20	crate::covariant_item_mut!();
21}
22
23impl<T> SimpleCollectionRef for Vec<T> {
24	crate::simple_collection_ref!();
25}
26
27impl<T> SimpleCollectionMut for Vec<T> {
28	crate::simple_collection_mut!();
29}
30
31impl<T> WithCapacity for Vec<T> {
32	#[inline(always)]
33	fn with_capacity(capacity: usize) -> Self {
34		Vec::with_capacity(capacity)
35	}
36}
37
38impl<T> Len for Vec<T> {
39	#[inline(always)]
40	fn len(&self) -> usize {
41		self.len()
42	}
43
44	#[inline(always)]
45	fn is_empty(&self) -> bool {
46		self.is_empty()
47	}
48}
49
50impl<T> Get<usize> for Vec<T> {
51	#[inline(always)]
52	fn get(&self, index: usize) -> Option<&T> {
53		self.as_slice().get(index)
54	}
55}
56
57impl<T> GetMut<usize> for Vec<T> {
58	#[inline(always)]
59	fn get_mut(&mut self, index: usize) -> Option<&mut T> {
60		self.as_mut_slice().get_mut(index)
61	}
62}
63
64impl<T> Capacity for Vec<T> {
65	#[inline(always)]
66	fn capacity(&self) -> usize {
67		self.capacity()
68	}
69}
70
71impl<T> Reserve for Vec<T> {
72	#[inline(always)]
73	fn reserve(&mut self, additional: usize) {
74		self.reserve(additional)
75	}
76}
77
78impl<T> PushBack for Vec<T> {
79	type Output = ();
80
81	#[inline(always)]
82	fn push_back(&mut self, t: T) {
83		self.push(t)
84	}
85}
86
87impl<T> PopBack for Vec<T> {
88	#[inline(always)]
89	fn pop_back(&mut self) -> Option<T> {
90		self.pop()
91	}
92}
93
94impl<T> Remove<usize> for Vec<T> {
95	#[inline(always)]
96	fn remove(&mut self, index: usize) -> Option<T> {
97		if index < self.len() {
98			Some(self.remove(index))
99		} else {
100			None
101		}
102	}
103}
104
105impl<T> Clear for Vec<T> {
106	#[inline(always)]
107	fn clear(&mut self) {
108		self.clear()
109	}
110}
111
112impl<T> Iter for Vec<T> {
113	type Iter<'a> = core::slice::Iter<'a, T> where Self: 'a;
114
115	#[inline(always)]
116	fn iter(&self) -> Self::Iter<'_> {
117		self.as_slice().iter()
118	}
119}
120
121impl<T> IterMut for Vec<T> {
122	type IterMut<'a> = core::slice::IterMut<'a, T> where Self: 'a;
123
124	#[inline(always)]
125	fn iter_mut(&mut self) -> Self::IterMut<'_> {
126		self.as_mut_slice().iter_mut()
127	}
128}