use std::ops::{Index, IndexMut}; pub(crate) struct Board { data: Box<[usize]>, } impl Board { pub fn alloc(size: usize) -> Self { return Self { data: vec![0usize; size].into_boxed_slice(), }; } pub fn len(&self) -> usize { return self.data.len(); } } impl Index for Board { type Output = usize; fn index(&self, index: usize) -> &Self::Output { return self .data .get(index) .unwrap_or_else(|| panic!("Y out of bounds: {index} >= {}", self.data.len())); } } impl IndexMut for Board { fn index_mut(&mut self, index: usize) -> &mut Self::Output { let len = self.data.len(); return self .data .get_mut(index) .unwrap_or_else(|| panic!("Y out of bounds: {index} >= {len}")); } } impl Clone for Board { fn clone(&self) -> Self { return Self { data: self.data.clone(), }; } }