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.
SliceVecCopy types with InitSliceVecInitSliceVec 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