hexga_core/collections/
capacity.rs

1use std::collections::TryReserveError;
2
3use crate::*;
4
5pub trait Capacity
6{
7    type Param;
8    fn capacity(&self) -> usize;
9
10    fn with_capacity_and_param(capacity: usize, param : Self::Param) -> Self;
11    #[inline(always)]
12    fn with_capacity(capacity: usize) -> Self where Self : Sized, Self::Param : Default { Self::with_capacity_and_param(capacity, ___()) }
13
14    fn reserve(&mut self, additional: usize);
15    fn reserve_exact(&mut self, additional: usize); // { self.reserve(additional); }
16
17    fn try_reserve(&mut self, additional: usize) -> Result<(), TryReserveError>;
18    fn try_reserve_exact(&mut self, additional: usize) -> Result<(), TryReserveError>; // { self.try_reserve(additional) }
19}
20
21impl<K, V> Capacity for HashMap<K, V, std::hash::RandomState>
22where
23    K: Eq + Hash,
24{
25    type Param = ();
26    #[inline(always)]
27    fn capacity(&self) -> usize { self.capacity() }
28    #[inline(always)]
29    fn with_capacity_and_param(capacity: usize, _ : Self::Param) -> Self { Self::with_capacity(capacity) }
30    
31    #[inline(always)]
32    fn reserve(&mut self, additional: usize) { self.reserve(additional); }
33    #[inline(always)]
34    fn reserve_exact(&mut self, additional: usize) { self.reserve(additional); }
35
36    #[inline(always)]
37    fn try_reserve(&mut self, additional: usize) -> Result<(), TryReserveError> { self.try_reserve(additional) }
38    #[inline(always)]
39    fn try_reserve_exact(&mut self, additional: usize) -> Result<(), TryReserveError> { self.try_reserve(additional) }
40}
41
42impl<T> Capacity for std::collections::BinaryHeap<T>
43where
44    T: Ord,
45{
46    type Param = ();
47    #[inline(always)]
48    fn capacity(&self) -> usize { self.capacity() }
49
50    #[inline(always)]
51    fn with_capacity_and_param(capacity: usize, _ : Self::Param) -> Self { Self::with_capacity(capacity) }
52
53    #[inline(always)]
54    fn reserve(&mut self, additional: usize) { self.reserve(additional); }
55    #[inline(always)]
56    fn reserve_exact(&mut self, additional: usize) { self.reserve_exact(additional); }
57
58    #[inline(always)]
59    fn try_reserve(&mut self, additional: usize) -> Result<(), TryReserveError> { self.try_reserve(additional) }
60    #[inline(always)]
61    fn try_reserve_exact(&mut self, additional: usize) -> Result<(), TryReserveError> { self.try_reserve_exact(additional) }
62}
63
64impl<T> Capacity for std::collections::HashSet<T, std::hash::RandomState>
65where
66    T: Eq + Hash,
67{
68    type Param = ();
69    #[inline(always)]
70    fn capacity(&self) -> usize { self.capacity() }
71
72    #[inline(always)]
73    fn with_capacity_and_param(capacity: usize, _ : Self::Param) -> Self { Self::with_capacity(capacity) }
74
75    #[inline(always)]
76    fn reserve(&mut self, additional: usize) { self.reserve(additional); }
77    #[inline(always)]
78    fn reserve_exact(&mut self, additional: usize) { self.reserve(additional); }
79
80    #[inline(always)]
81    fn try_reserve(&mut self, additional: usize) -> Result<(), TryReserveError> { self.try_reserve(additional) }
82    #[inline(always)]
83    fn try_reserve_exact(&mut self, additional: usize) -> Result<(), TryReserveError> { self.try_reserve(additional) }
84}
85
86impl<T> Capacity for std::collections::VecDeque<T>
87{
88    type Param = ();
89    #[inline(always)]
90    fn capacity(&self) -> usize { self.capacity() }
91
92    #[inline(always)]
93    fn with_capacity_and_param(capacity: usize, _ : Self::Param) -> Self { Self::with_capacity(capacity) }
94
95    #[inline(always)]
96    fn reserve(&mut self, additional: usize) { self.reserve(additional); }
97    #[inline(always)]
98    fn reserve_exact(&mut self, additional: usize) { self.reserve_exact(additional); }
99
100    #[inline(always)]
101    fn try_reserve(&mut self, additional: usize) -> Result<(), TryReserveError> { self.try_reserve(additional) }
102    #[inline(always)]
103    fn try_reserve_exact(&mut self, additional: usize) -> Result<(), TryReserveError> { self.try_reserve_exact(additional) }
104}
105
106impl Capacity for std::ffi::OsString
107{
108    type Param = ();
109    #[inline(always)]
110    fn capacity(&self) -> usize { self.capacity() }
111
112    #[inline(always)]
113    fn with_capacity_and_param(capacity: usize, _ : Self::Param) -> Self { Self::with_capacity(capacity) }
114
115    #[inline(always)]
116    fn reserve(&mut self, additional: usize) { self.reserve(additional); }
117    #[inline(always)]
118    fn reserve_exact(&mut self, additional: usize) { self.reserve_exact(additional); }
119
120    #[inline(always)]
121    fn try_reserve(&mut self, additional: usize) -> Result<(), TryReserveError> { self.try_reserve(additional) }
122    #[inline(always)]
123    fn try_reserve_exact(&mut self, additional: usize) -> Result<(), TryReserveError> { self.try_reserve_exact(additional) }
124}
125
126/* 
127impl<R: std::io::Read> Capacity for std::io::BufReader<R> {}
128impl<W: std::io::Write> Capacity for std::io::BufWriter<W> {}
129impl<W: std::io::Write> Capacity for std::io::LineWriter<W> {}
130*/
131
132impl Capacity for std::path::PathBuf
133{
134    type Param = ();
135    #[inline(always)]
136    fn capacity(&self) -> usize { self.capacity() }
137
138    #[inline(always)]
139    fn with_capacity_and_param(capacity: usize, _ : Self::Param) -> Self { Self::with_capacity(capacity) }
140
141    #[inline(always)]
142    fn reserve(&mut self, additional: usize) { self.reserve(additional); }
143    #[inline(always)]
144    fn reserve_exact(&mut self, additional: usize) { self.reserve_exact(additional); }
145
146    #[inline(always)]
147    fn try_reserve(&mut self, additional: usize) -> Result<(), TryReserveError> { self.try_reserve(additional) }
148    #[inline(always)]
149    fn try_reserve_exact(&mut self, additional: usize) -> Result<(), TryReserveError> { self.try_reserve_exact(additional) }
150}
151
152impl<T> Capacity for Vec<T>
153{
154    type Param = ();
155    #[inline(always)]
156    fn capacity(&self) -> usize { self.capacity() }
157
158    #[inline(always)]
159    fn with_capacity_and_param(capacity: usize, _ : Self::Param) -> Self { Self::with_capacity(capacity) }
160
161    #[inline(always)]
162    fn reserve(&mut self, additional: usize) { self.reserve(additional); }
163    #[inline(always)]
164    fn reserve_exact(&mut self, additional: usize) { self.reserve_exact(additional); }
165
166    #[inline(always)]
167    fn try_reserve(&mut self, additional: usize) -> Result<(), TryReserveError> { self.try_reserve(additional) }
168    #[inline(always)]
169    fn try_reserve_exact(&mut self, additional: usize) -> Result<(), TryReserveError> { self.try_reserve_exact(additional) }
170}
171
172// Discutable
173/* 
174impl<'a, T> Capacity for &'a [T]
175{
176    type Param = &'a Vec<T>;
177    #[inline(always)]
178    fn capacity(&self) -> usize { self.len() }
179
180    #[inline(always)]
181    fn with_capacity_and_param(_: usize, inside : Self::Param) -> Self { inside }
182
183    #[inline(always)]
184    fn reserve(&mut self, _: usize) {}
185    #[inline(always)]
186    fn reserve_exact(&mut self, _: usize) {}
187
188    #[inline(always)]
189    fn try_reserve(&mut self, _: usize) -> Result<(), TryReserveError> { Ok(()) }
190    #[inline(always)]
191    fn try_reserve_exact(&mut self, _: usize) -> Result<(), TryReserveError> { Ok(()) }
192}
193impl<'a, T> Capacity for &'a mut [T]
194impl<'a, T> Capacity for &'a str
195impl<'a, T> Capacity for &'a mut str
196...
197*/
198
199impl Capacity for String
200{
201    type Param = ();
202    #[inline(always)]
203    fn capacity(&self) -> usize { self.capacity() }
204
205    #[inline(always)]
206    fn with_capacity_and_param(capacity: usize, _ : Self::Param) -> Self { Self::with_capacity(capacity) }
207
208    #[inline(always)]
209    fn reserve(&mut self, additional: usize) { self.reserve(additional); }
210    #[inline(always)]
211    fn reserve_exact(&mut self, additional: usize) { self.reserve_exact(additional); }
212
213    #[inline(always)]
214    fn try_reserve(&mut self, additional: usize) -> Result<(), TryReserveError> { self.try_reserve(additional) }
215    #[inline(always)]
216    fn try_reserve_exact(&mut self, additional: usize) -> Result<(), TryReserveError> { self.try_reserve_exact(additional) }
217}