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.
std
(default) - enables you to use an allocator, andalloc
- enables you to use an allocator, for heap allocated storages
(like Vec
)nightly
- enables you to use array (T; N
) based storagesOn stable no_std
you have two choices on for which storage you can use
SliceVec
or InitSliceVec
. There are three major differences between
them.
SliceVec
Copy
types with InitSliceVec
InitSliceVec
as long as you stay
within it's capacity```rust use genericvec::{SliceVec, InitSliceVec, uninitarray};
let mut uninitbuffer = uninitarray!(16); let mut slicevec = SliceVec::new(&mut uninitbuffer);
assert!(slicevec.isempty()); slicevec.push(10); asserteq!(slice_vec, 10); ```
```rust let mut initbuffer = 0xae; 16; let mut slicevec = InitSliceVec::new(&mut init_buffer);
assert!(slicevec.isfull()); asserteq!(slicevec.pop(), 0xae); slicevec.setlen(16); assert!(slicevec.isfull()); ```
Of course if you try to push past a *SliceVec
's capacity
(the length of the slice you passed in), then it will panic.
rust
let mut init_buffer = 0xae; 16;
let mut slice_vec = InitSliceVec::new(&mut init_buffer);
slice_vec.push(0);
If you enable the nightly feature then you gain access to
ArrayVec
and InitArrayVec
. These are 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.
```rust use generic_vec::ArrayVec;
let mut array_vec = ArrayVec::
arrayvec.push(10); arrayvec.push(20); array_vec.push(30);
asserteq!(arrayvec, 10, 20, 30); ```
The ditinction between ArrayVec
and InitArrayVec
is identical to their slice counterparts.
Finally 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.
Current version: 0.1.0-alpha
License: MIT/Apache License 2.0