diff --git a/benches/benches.rs b/benches/benches.rs index 3167106..f3ac035 100644 --- a/benches/benches.rs +++ b/benches/benches.rs @@ -51,6 +51,17 @@ fn criterion_benchmark(c: &mut Criterion) { ] }) }); + c.bench_function("Macro init grid from_vec", |b| { + b.iter(|| { + let vec = vec![ + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, + 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, + 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, + 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, + ]; + Grid::from_vec(vec, 10) + }) + }); c.bench_function("Macro init grid", |b| { b.iter(|| { grid![[0,1,2,3,4,5,6,7,8,9] diff --git a/src/lib.rs b/src/lib.rs index 5875e8e..d7d8d92 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -40,17 +40,21 @@ macro_rules! grid { ( [$( $x0:expr ),*] $([$( $x:expr ),*])* ) => { { let mut _assert_width0 = [(); $crate::count!($($x0)*)]; - let mut vec = Vec::new(); + let cols = $crate::count!($($x0)*); - - $( vec.push($x0); )* + let rows = 1usize; $( let _assert_width = [(); $crate::count!($($x)*)]; _assert_width0 = _assert_width; - $( vec.push($x); )* + let rows = rows + 1usize; )* + let mut vec = Vec::with_capacity(rows * cols); + + $( vec.push($x0); )* + $( $( vec.push($x); )* )* + $crate::Grid::from_vec(vec, cols) } };