diff --git a/src/repr/pos_map.rs b/src/repr/pos_map.rs index 36f1557..6a2719f 100644 --- a/src/repr/pos_map.rs +++ b/src/repr/pos_map.rs @@ -9,8 +9,9 @@ use super::{Board, CoordPair}; pub struct PosMap([T; Board::AREA.0 as usize]); impl PosMap { - pub const unsafe fn uninit() -> Self { - Self([MaybeUninit::zeroed().assume_init(); Board::AREA.0 as usize]) + // SAFETY! only used when creating PosMap (needs to be filled) + const unsafe fn uninit() -> Self { + Self(MaybeUninit::zeroed().assume_init()) } pub const fn from(v: [[T; Board::SIZE as usize]; Board::SIZE as usize]) -> Self { @@ -30,10 +31,8 @@ impl PosMap { const_for!(i in 0..Board::SIZE => { const_for!(j in 0..Board::SIZE => { - // 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))) }; - }); + std::mem::swap(&mut n[i as usize][j as usize], self.get_mut(CoordPair::from_axes(i, j))); + }); }); n } @@ -67,7 +66,7 @@ mod test { .try_into() .unwrap(); - let posmap = PosMap::from(data.clone()); + let posmap = PosMap::from(data); assert_eq!(data, posmap.into_2d()); }