PosMap: optimize into_2d

This commit is contained in:
Simon Gardling 2025-03-25 09:42:33 -04:00
parent bd5ddba5bc
commit 9c0c4e02a0
Signed by: titaniumtown
GPG Key ID: 9AB28AC10ECE533D

View File

@ -24,18 +24,24 @@ impl<T: Copy> PosMap<T> {
n
}
pub const fn into_2d(&self) -> [[T; Board::SIZE as usize]; Board::SIZE as usize] {
pub const fn into_2d(mut self) -> [[T; Board::SIZE as usize]; Board::SIZE as usize] {
let mut n: [[T; Board::SIZE as usize]; Board::SIZE as usize] =
unsafe { MaybeUninit::zeroed().assume_init() };
const_for!(i in 0..Board::SIZE => {
const_for!(j in 0..Board::SIZE => {
n[i as usize][j as usize] = *self.get(CoordPair::from_axes(i, j));
});
// take because we are consuming `self`
n[i as usize][j as usize] =
unsafe { std::ptr::read(self.get_mut(CoordPair::from_axes(i, j))) };
});
});
n
}
pub const fn get_mut(&mut self, coords: CoordPair) -> &mut T {
&mut self.0[coords.0 as usize]
}
pub const fn get(&self, coords: CoordPair) -> &T {
&self.0[coords.0 as usize]
}