diff -r c47283feafac -r 2869c2ccb1b8 rust/land2d/src/lib.rs --- a/rust/land2d/src/lib.rs Tue Oct 30 05:55:58 2018 +0300 +++ b/rust/land2d/src/lib.rs Tue Oct 30 19:05:52 2018 +0300 @@ -4,23 +4,21 @@ use std::cmp; use std::ops; -use integral_geometry::{ArcPoints, EquidistantPoints, LinePoints, Point}; +use integral_geometry::{ + ArcPoints, EquidistantPoints, LinePoints, + Point, Size, SizeMask +}; pub struct Land2D { pixels: vec2d::Vec2D, - width_mask: usize, - height_mask: usize, + mask: SizeMask } impl Land2D { - pub fn new(width: usize, height: usize, fill_value: T) -> Self { - assert!(width.is_power_of_two()); - assert!(height.is_power_of_two()); - + pub fn new(size: Size, fill_value: T) -> Self { Self { - pixels: vec2d::Vec2D::new(width, height, fill_value), - width_mask: !(width - 1), - height_mask: !(height - 1), + pixels: vec2d::Vec2D::new(size, fill_value), + mask: size.to_mask() } } @@ -36,12 +34,12 @@ #[inline] pub fn is_valid_x(&self, x: i32) -> bool { - (x as usize & self.width_mask) == 0 + self.mask.contains_x(x as usize) } #[inline] pub fn is_valid_y(&self, y: i32) -> bool { - (y as usize & self.height_mask) == 0 + self.mask.contains_y(y as usize) } #[inline] @@ -269,7 +267,7 @@ #[test] fn basics() { - let l: Land2D = Land2D::new(32, 64, 0); + let l: Land2D = Land2D::new(Size::new(32, 64), 0); assert!(l.is_valid_coordinate(0, 0)); assert!(!l.is_valid_coordinate(-1, -1)); @@ -281,7 +279,7 @@ #[test] fn fill() { - let mut l: Land2D = Land2D::new(128, 128, 0); + let mut l: Land2D = Land2D::new(Size::square(128), 0); l.draw_line(Point::new(0, 0), Point::new(32, 96), 1); l.draw_line(Point::new(32, 96), Point::new(64, 32), 1);