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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
mod dense;
mod error;
mod index;
mod light;

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

#[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)
    }};
}