Speedup init vec macro

This commit is contained in:
Armin Becher 2020-04-04 18:43:28 +02:00
parent b7dff2e573
commit 00a5677ff6
2 changed files with 19 additions and 4 deletions

View file

@ -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]

View file

@ -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)
}
};