generic-vec
A vector that can store items anywhere: in slices, arrays, or the heap!
GenericVec
has complete parity with Vec
, and even provides some features
that are only in nightly
on std
(like GenericVec::drain_filter
), or a more permissive
interface like GenericVec::retain
. In fact, you can trivially convert a Vec
to a
HeapVec
and back!
This crate is no_std
compatible, just turn off all default features.
Features
std
(default) - enables you to use an allocator, andalloc
- enables you to use an allocator, for heap allocated storages (likeVec
)nightly
- enables you to use array ([T; N]
) based storages
Basic Usage
SliceVec
SliceVec
stores an uninit slice buffer, and they store all of thier values in that buffer.
use SliceVec;
let mut uninit_buffer = ;
let mut slice_vec = new;
assert!;
slice_vec.push;
assert_eq!;
ArrayVec
ArrayVec
is just like the slice versions, but since they own their data,
they can be freely moved around, unconstrained. You can also create
a new ArrayVec
without passing in an existing buffer,
unlike the slice versions.
use ArrayVec;
let mut array_vec = new;
array_vec.push;
array_vec.push;
array_vec.push;
assert_eq!;
alloc
A HeapVec
is just Vec
, but built atop GenericVec
,
meaning you get all the features of GenericVec
for free! But this
requries either the alloc
or std
feature to be enabled.
use ;
let mut vec: = gvec!;
assert_eq!;
vec.extend;
assert_eq!;
vec.try_push.expect_err;
nightly
On nightly
- a number of optimizations are enabled
- some diagnostics become better
Note on the documentation: if the feature exists on Vec
, then the documentation
is either exactly the same as Vec
or slightly adapted to better fit GenericVec
Note on implementation: large parts of the implementation came straight from Vec
so thanks for the amazing reference std
!
Current version: 0.1.2
License: MIT/Apache-2.0