6 releases
0.2.0 | Apr 7, 2020 |
---|---|
0.1.4 | Apr 5, 2020 |
#2133 in Data structures
50KB
842 lines
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.
License
Licensed under either of
- Apache License, Version 2.0 (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)
at your option.
Contribution
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.