Grid module updates as of day9
This commit is contained in:
parent
2ce2edca0d
commit
a6c6a8d6ec
1 changed files with 0 additions and 59 deletions
|
@ -27,65 +27,6 @@ impl Direction {
|
|||
}
|
||||
}
|
||||
|
||||
#[derive(Debug)]
|
||||
struct Grid<T: Clone + Copy> {
|
||||
grid: Vec<Vec<T>>,
|
||||
}
|
||||
|
||||
impl<T> Grid<T>
|
||||
where
|
||||
T: Clone + Copy,
|
||||
{
|
||||
pub fn new(size: usize, item: T) -> Grid<T> {
|
||||
let vectors = (0..size).map(|_| vec![item; size]).collect::<Vec<Vec<T>>>();
|
||||
Grid { grid: vectors }
|
||||
}
|
||||
|
||||
pub fn height(&self) -> usize {
|
||||
self.grid.len()
|
||||
}
|
||||
|
||||
pub fn width(&self) -> usize {
|
||||
self.grid[0].len()
|
||||
}
|
||||
|
||||
pub fn get_at(&self, pt: &Point) -> Option<&T> {
|
||||
if let Some(row) = self.grid.get(pt.y as usize) {
|
||||
row.get(pt.x as usize)
|
||||
} else {
|
||||
None
|
||||
}
|
||||
}
|
||||
|
||||
pub fn set_at(&mut self, pt: &Point, value: T) -> Result<(), &str> {
|
||||
if let Some(row) = self.grid.get_mut(pt.y as usize) {
|
||||
if pt.x < row.len() as i32 {
|
||||
row[pt.x as usize] = value;
|
||||
Ok(())
|
||||
} else {
|
||||
Err("Unable to set")
|
||||
}
|
||||
} else {
|
||||
Err("Unable to set")
|
||||
}
|
||||
}
|
||||
|
||||
pub fn iter_points(&self) -> Box<dyn Iterator<Item = Point>> {
|
||||
let width = self.width();
|
||||
Box::new(
|
||||
(0..self.height())
|
||||
.map(move |y| (0..width).map(move |x| Point::new(x as i32, y as i32)))
|
||||
.flatten(),
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
impl<T: Clone + Copy> From<Vec<Vec<T>>> for Grid<T> {
|
||||
fn from(grid: Vec<Vec<T>>) -> Grid<T> {
|
||||
Grid { grid }
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* A point in standard coordinates, where Y values grow in the positively in the North direction.
|
||||
*/
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue