From b7dff2e5732751b3131e5f606bb363dd51ffb846 Mon Sep 17 00:00:00 2001 From: Armin Becher Date: Sat, 4 Apr 2020 18:18:37 +0200 Subject: [PATCH] Speedup init grid --- src/lib.rs | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index 01193ca..5875e8e 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -34,7 +34,8 @@ macro_rules! grid { }; ( [$( $x:expr ),* ]) => { { let vec = vec![$($x),*]; - $crate::Grid::from_vec(&vec, vec.len()) + let len = vec.len(); + $crate::Grid::from_vec(vec, len) } }; ( [$( $x0:expr ),*] $([$( $x:expr ),*])* ) => { { @@ -50,7 +51,7 @@ macro_rules! grid { $( vec.push($x); )* )* - $crate::Grid::from_vec(&vec, cols) + $crate::Grid::from_vec(vec, cols) } }; } @@ -110,7 +111,7 @@ impl Grid { /// use grid::Grid; /// Grid::from_vec(&vec![1,2,3,4,5], 3); /// ``` - pub fn from_vec(vec: &Vec, cols: usize) -> Grid { + pub fn from_vec(vec: Vec, cols: usize) -> Grid { if vec.len() == 0 { if cols == 0 { return grid![]; @@ -121,9 +122,10 @@ impl Grid { if vec.len() % cols != 0 { panic!("Vector length must be a multiple of cols."); } + let rows = vec.len(); Grid { - data: vec.to_vec(), - rows: vec.len() / cols, + data: vec, + rows: rows / cols, cols: cols, } } @@ -226,26 +228,26 @@ mod test { #[test] fn from_vec_zero() { - let grid: Grid = Grid::from_vec(&vec![], 0); + let grid: Grid = Grid::from_vec(vec![], 0); assert_eq!(grid.size(), (0, 0)); } #[test] #[should_panic] fn from_vec_panics_1() { - let _: Grid = Grid::from_vec(&vec![1, 2, 3], 0); + let _: Grid = Grid::from_vec(vec![1, 2, 3], 0); } #[test] #[should_panic] fn from_vec_panics_2() { - let _: Grid = Grid::from_vec(&vec![1, 2, 3], 2); + let _: Grid = Grid::from_vec(vec![1, 2, 3], 2); } #[test] #[should_panic] fn from_vec_panics_3() { - let _: Grid = Grid::from_vec(&vec![], 1); + let _: Grid = Grid::from_vec(vec![], 1); } #[test]