cl_aux/traits/
capacity.rs1use crate::SingleItemStorage;
2#[cfg(feature = "alloc")]
3use alloc::{string::String, vec::Vec};
4
5pub trait Capacity {
7 fn capacity(&self) -> usize;
10}
11
12impl<T> Capacity for &T
13where
14 T: Capacity,
15{
16 #[inline]
17 fn capacity(&self) -> usize {
18 (*self).capacity()
19 }
20}
21
22impl Capacity for () {
26 #[inline]
27 fn capacity(&self) -> usize {
28 0
29 }
30}
31
32impl<T> Capacity for Option<T> {
36 #[inline]
37 fn capacity(&self) -> usize {
38 1
39 }
40}
41
42impl<T> Capacity for SingleItemStorage<T> {
47 #[inline]
48 fn capacity(&self) -> usize {
49 1
50 }
51}
52
53impl<T, const N: usize> Capacity for [T; N] {
58 #[inline]
59 fn capacity(&self) -> usize {
60 N
61 }
62}
63
64impl<T> Capacity for &'_ [T] {
69 #[inline]
70 fn capacity(&self) -> usize {
71 self.len()
72 }
73}
74
75impl<T> Capacity for &'_ mut [T] {
80 #[inline]
81 fn capacity(&self) -> usize {
82 self.len()
83 }
84}
85
86#[cfg(feature = "alloc")]
91impl Capacity for String {
92 #[inline]
93 fn capacity(&self) -> usize {
94 self.capacity()
95 }
96}
97
98#[cfg(feature = "alloc")]
103impl<T> Capacity for Vec<T> {
104 #[inline]
105 fn capacity(&self) -> usize {
106 self.capacity()
107 }
108}
109
110#[cfg(feature = "arrayvec")]
115impl<const N: usize> Capacity for arrayvec::ArrayString<N> {
116 #[inline]
117 fn capacity(&self) -> usize {
118 self.capacity()
119 }
120}
121
122#[cfg(feature = "arrayvec")]
127impl<T, const N: usize> Capacity for arrayvec::ArrayVec<T, N> {
128 #[inline]
129 fn capacity(&self) -> usize {
130 self.capacity()
131 }
132}
133
134#[cfg(feature = "smallvec")]
139impl<A> Capacity for smallvec::SmallVec<A>
140where
141 A: smallvec::Array,
142{
143 #[inline]
144 fn capacity(&self) -> usize {
145 self.capacity()
146 }
147}
148
149#[cfg(feature = "tinyvec")]
154impl<A> Capacity for tinyvec::ArrayVec<A>
155where
156 A: tinyvec::Array,
157 A::Item: Default,
158{
159 #[inline]
160 fn capacity(&self) -> usize {
161 self.capacity()
162 }
163}
164
165#[cfg(all(feature = "alloc", feature = "tinyvec"))]
170impl<A> Capacity for tinyvec::TinyVec<A>
171where
172 A: tinyvec::Array,
173 A::Item: Default,
174{
175 #[inline]
176 fn capacity(&self) -> usize {
177 self.capacity()
178 }
179}