From d385199c48d565d9ffc8948f137d716e534d5d0d Mon Sep 17 00:00:00 2001 From: Justin Worthe Date: Sun, 7 Jul 2019 12:03:44 +0200 Subject: Cleaning up TODOs --- src/game/map.rs | 53 +++++++++++++++++++---------------------------------- 1 file changed, 19 insertions(+), 34 deletions(-) (limited to 'src/game/map.rs') diff --git a/src/game/map.rs b/src/game/map.rs index c062c8f..45d25fd 100644 --- a/src/game/map.rs +++ b/src/game/map.rs @@ -1,13 +1,13 @@ -use crate::geometry::*; use crate::constants::*; +use crate::geometry::*; #[derive(Default, Debug, PartialEq, Eq, Clone)] pub struct Map { - cells: [u64; MAP_U64S] + cells: [u64; MAP_U64S], } impl Map { - pub fn at(&self, p: Point2d) -> Option { + fn internal_index(p: Point2d) -> Option<(usize, usize)> { if p.y < 0 || p.y as usize >= MAP_SIZE { None } else { @@ -18,47 +18,32 @@ impl Map { let global_bit = row_data.start_bit + p.x as usize - row_data.x_offset; let integer = global_bit / 64; let bit = global_bit % 64; - let mask = 1 << bit; - Some(self.cells[integer] & mask != 0) + Some((integer, bit)) } } } + pub fn at(&self, p: Point2d) -> Option { + Map::internal_index(p).map(|(integer, bit)| { + let mask = 1 << bit; + self.cells[integer] & mask != 0 + }) + } + pub fn set(&mut self, p: Point2d) { - if p.y < 0 || p.y as usize >= MAP_SIZE { - debug_assert!(false, "Tried to set an out of bounds bit, {:?}", p); + if let Some((integer, bit)) = Map::internal_index(p) { + let mask = 1 << bit; + self.cells[integer] |= mask; } else { - let row_data = &MAP_ROW_SIZE[p.y as usize]; - if p.x < row_data.x_offset as i8 || p.x as usize >= row_data.x_offset + row_data.len() { - debug_assert!(false, "Tried to set an out of bounds bit, {:?}", p); - } else { - let global_bit = row_data.start_bit + p.x as usize - row_data.x_offset; - let integer = global_bit / 64; - let bit = global_bit % 64; - let mask = 1 << bit; - self.cells[integer] |= mask; - } + panic!("Tried to set an out of bounds bit, {:?}", p); } } pub fn clear(&mut self, p: Point2d) { - if p.y < 0 || p.y as usize >= MAP_SIZE { - debug_assert!(false, "Tried to set an out of bounds bit, {:?}", p); + if let Some((integer, bit)) = Map::internal_index(p) { + let mask = !(1 << bit); + self.cells[integer] &= mask; } else { - let row_data = &MAP_ROW_SIZE[p.y as usize]; - if p.x < row_data.x_offset as i8 || p.x as usize >= row_data.x_offset + row_data.len() { - debug_assert!(false, "Tried to set an out of bounds bit, {:?}", p); - } else { - let global_bit = row_data.start_bit + p.x as usize - row_data.x_offset; - let integer = global_bit / 64; - let bit = global_bit % 64; - let mask = !(1 << bit); - self.cells[integer] &= mask; - } + panic!("Tried to set an out of bounds bit, {:?}", p); } } } - -#[cfg(test)] -mod test { - // TODO: Property test for at, set and clear -} -- cgit v1.2.3