Crates.io | arrav |
lib.rs | arrav |
version | 0.2.0 |
source | src |
created_at | 2020-04-04 20:41:21.417212 |
updated_at | 2020-04-07 00:32:57.150334 |
description | Sentinel-based heapless vector |
homepage | |
repository | https://github.com/jonhoo/arrav.git |
max_upload_size | |
id | 226393 |
size | 65,788 |
A sentinel-based, heapless, Vec
-like type.
Arrays are great, because they do not require allocation. But arrays are fixed-size.
Slices are great, because you can make them smaller.
But slices aren't Sized
.
Vectors are great, because you can make them bigger. But vectors require allocation.
This type provides a type that acts like a vector but is represented
exactly like an array. Unlike other array-backed vector-like types, but
like C-style strings and arrays, Arrav
uses a sentinel value to
indicate unoccupied elements. This makes push
and pop
a little
slower, but avoids having to store the length separately. The trade-off
is that the sentinel value can no longer be stored in the array.
Arrav
is intended for when you have a small but variable number of
small values that you want to store compactly (e.g., because they're
going to be stored in a large number of elements). This is also why the
"search" for the sentinel value to determine the array's length (and
thus for push
and pop
) is unlikely to matter in practice.
Unlike C-style strings and arrays, which use NULL
as the sentinel,
Arrav
uses the max value of the type (like std::u8::MAX
). This
means that unless you are saturating the type's range, you won't even
notice the sentinel.
Licensed under either of
at your option.
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.