board fixups

This commit is contained in:
Simon Gardling 2025-02-19 21:15:36 -05:00
parent c2120dfcc4
commit 846dfc8b4c
Signed by: titaniumtown
GPG Key ID: 9AB28AC10ECE533D

View File

@ -30,7 +30,14 @@ struct PosMap<T>(ArrayVec<T, BOARD_AREA>);
impl<T> PosMap<T> {
pub fn get(&self, row: usize, col: usize) -> &T {
&self.0[row * BOARD_SIZE + col]
let index = row * BOARD_SIZE + col;
#[cfg(debug_assertions)]
if index > BOARD_AREA + 1 {
panic!("index is out of range");
}
unsafe { &self.0.get_unchecked(index) }
}
}
@ -72,7 +79,7 @@ fn gen_adj_lookup() -> PosMap<ChainCollection> {
"chains go out-of-bounds"
);
// ensure all nodes in all chains are unique across chains, ensures beavior in
// SAFETY! ensure all nodes in all chains are unique across chains, ensures beavior in
// [`Board::propegate_from`]
let mut uniq = HashSet::new();
assert!(
@ -328,8 +335,8 @@ impl Board {
/// Get the "net score" of a player
/// Formula: `net_score = Score_player - Score_opponent`
#[const_fn(cfg(not(feature = "bitvec")))]
pub const fn net_score(&self, piece: Piece) -> isize {
self.count(piece) as isize - self.count(piece.flip()) as isize
pub const fn net_score(&self, piece: Piece) -> i16 {
self.count(piece) as i16 - self.count(piece.flip()) as i16
}
/// Returns the winner of the board (if any)