This crate dynvec provides the DynVec type that acts like a vector to store any datatype.
By default, the DynVec uses a system of chunks that are allocated on the heap when needed but this can be changed using the RawDynVec structure along with a Region.
At the moment, three types of regions are implemented.
Block: A fixed-size block of memoryChunks: A region that allocatesBlocks (chunks) when one becomes full.Global: A simple region that maps to rust's allocator (each item is allocated anywhere on the heap memory).
Example
Using the default DynVec:
use DynVec;
// Create an empty `DynVec`
let mut my_vec = new;
// By default, each chunk will be allocated with a size of 1024 bytes.
// This can be changed using the `DynVec::with_chunk_size` function.
// Items can be inserted into the vector
let handle_u8 = my_vec.insert;
let handle_str = my_vec.insert;
let handle_vec = my_vec.insert;
// They can be accessed normally using indexing operations
my_vec.push;
assert_eq!;
assert_eq!;
assert_eq!;
// Removing them is just as easy
let vector = my_vec.remove.unwrap;
assert_eq!;
// The vector can be cleared (everything gets properly dropped)
my_vec.clear;
Using another type of region:
use ;
// This is basically a vector of boxes.
let mut my_vec = with_region;
my_vec.insert;
my_vec.insert;
You might want to avoid having typed handles everywhere. You can use raw handles:
use DynVec;
let mut my_vec = new;
let mut handles = Vecnew;
handles.push;
handles.push;
handles.push;
for handle in handles
Note
I used DynVec as a name even though it is not at all a vector because it makes it easy to understand what it does.