pub struct Capacity<const N: usize> { /* private fields */ }
Expand description
Defines the capacity for a data structure, considering the non-empty nature of data structures in this crate.
Many data structures provide a with_capacity
or similar constructor to enable pre-allocation.
This has the potential to become confusing for users of a non-empty data structure:
is this capacity the full capacity, or the additional capacity?
To prevent this confusion, this crate uses Capacity
for these types of methods.
§N
constant
The N
constant is the capacity size of the statically sized portion of the data structure.
For example, unzero::Vec<T>
statically stores one T
, so its value for N
is 1.
§Kinds of capacity
total
: Total capacity means “this is the total size of the data structure, including the statically sized portion maintained by the non-empty data structure”.dynamic
: Dynamic capacity means “this is the size of the dynamic portion of the data structure”. Most non-empty data structures are backed by some other dynamically growable structure, this size represents the size of that structure directly.
For example, consider the following cases (Vec
in the table below refers to [unempty::Vec
]):
Constructor | Total Capacity | Dynamic Capacity |
---|---|---|
Vec::new(()) | 1 | 0 |
Vec::with_capacity(10.into()) | 10 | 9 |
let v = Vec::new(()); v.push(()); | 2 | 1 |
§From
conversions
The From
conversions provided for this data structure take the more conservative route and
treat the original value being converted from as total capacity.
Implementations§
Source§impl<const N: usize> Capacity<N>
impl<const N: usize> Capacity<N>
Sourcepub fn new_total(capacity: usize) -> Self
pub fn new_total(capacity: usize) -> Self
Create a Capacity
with the provided total capacity.
If the provided total capacity is less than N
, it is increased to N
.
For definitions on kinds of capacity, see [Kinds of capacity].
Sourcepub fn new_dynamic(capacity: usize) -> Self
pub fn new_dynamic(capacity: usize) -> Self
Create a Capacity
with the provided capacity for the dynamic portion of the data structure.
If the provided dynamic capacity would cause an integer overflow when accounting for N
,
the dynamic capacity is reduced to usize::MAX - N
.
For definitions on kinds of capacity, see [Kinds of capacity].
Sourcepub fn total(&self) -> usize
pub fn total(&self) -> usize
Reference the total capacity specified.
For definitions on kinds of capacity, see [Kinds of capacity].