1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
mod error;
mod index;
mod vec;

pub use error::Error;
pub use index::GenerationalIndex;
pub use vec::GenerationalVec;

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

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