PosMap: improve
This commit is contained in:
parent
774dc39f0d
commit
fe57ccda3f
@ -9,8 +9,9 @@ use super::{Board, CoordPair};
|
|||||||
pub struct PosMap<T>([T; Board::AREA.0 as usize]);
|
pub struct PosMap<T>([T; Board::AREA.0 as usize]);
|
||||||
|
|
||||||
impl<T: Copy> PosMap<T> {
|
impl<T: Copy> PosMap<T> {
|
||||||
pub const unsafe fn uninit() -> Self {
|
// SAFETY! only used when creating PosMap (needs to be filled)
|
||||||
Self([MaybeUninit::zeroed().assume_init(); Board::AREA.0 as usize])
|
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 {
|
pub const fn from(v: [[T; Board::SIZE as usize]; Board::SIZE as usize]) -> Self {
|
||||||
@ -30,10 +31,8 @@ impl<T: Copy> PosMap<T> {
|
|||||||
|
|
||||||
const_for!(i in 0..Board::SIZE => {
|
const_for!(i in 0..Board::SIZE => {
|
||||||
const_for!(j in 0..Board::SIZE => {
|
const_for!(j in 0..Board::SIZE => {
|
||||||
// take because we are consuming `self`
|
std::mem::swap(&mut n[i as usize][j as usize], self.get_mut(CoordPair::from_axes(i, j)));
|
||||||
n[i as usize][j as usize] =
|
});
|
||||||
unsafe { std::ptr::read(self.get_mut(CoordPair::from_axes(i, j))) };
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
n
|
n
|
||||||
}
|
}
|
||||||
@ -67,7 +66,7 @@ mod test {
|
|||||||
.try_into()
|
.try_into()
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
|
||||||
let posmap = PosMap::from(data.clone());
|
let posmap = PosMap::from(data);
|
||||||
|
|
||||||
assert_eq!(data, posmap.into_2d());
|
assert_eq!(data, posmap.into_2d());
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user