gvec 0.5.0

Very simple implementation of generational indexing for vectors written in Rust
Documentation
mod dense;
mod error;
mod index;
mod light;
mod soft;

pub use dense::DenseVec;
pub use error::Error;
pub use index::GenerationalIndex;
pub use light::LightVec;
pub use light::LightVecAllocator;
pub use soft::SoftAlloc;
pub use soft::SoftVec;

#[macro_export]
macro_rules! replace_expr {
    ($_t:tt $sub:expr) => {
        $sub
    };
}

#[macro_export]
macro_rules! dvec {
    ($($item:expr),*) => {
        {
            let quantity = { 0usize $(+ replace_expr!($item 1usize))* };
            let mut result_vec = DenseVec::with_capacity(quantity);
            let mut indices_vec: Vec<GenerationalIndex> = Vec::with_capacity(quantity);
            $(
                indices_vec.push(result_vec.insert($item));
            )*
            (result_vec, indices_vec)
        };
    };
    ($quantity:expr; $item:expr) => {
        {
            let mut result_vec = DenseVec::with_capacity($quantity);
            let mut indices_vec: Vec<GenerationalIndex> = Vec::with_capacity($quantity);
            for i in 0..$quantity {
                indices_vec.push(result_vec.insert($item));
            }
            (result_vec, indices_vec)
        };
    }
}

#[macro_export]
macro_rules! lvec {
    ($quantity:expr; $item:expr) => {{
        let (mut result_vec, mut vec_alloc) = LightVec::with_capacity($quantity);
        let mut indices_vec: Vec<GenerationalIndex> = Vec::with_capacity($quantity);
        for i in 0..$quantity {
            indices_vec.push(result_vec.insert($item, &mut vec_alloc));
        }
        (result_vec, vec_alloc, indices_vec)
    }};
}