From 3608366482bd671a37267c277b1d4d0ee2db12b9 Mon Sep 17 00:00:00 2001 From: Simon Gardling Date: Wed, 5 Mar 2025 22:05:15 -0500 Subject: [PATCH] coord stuff --- src/repr/board.rs | 2 ++ src/repr/coords.rs | 22 +++++++++++----------- 2 files changed, 13 insertions(+), 11 deletions(-) diff --git a/src/repr/board.rs b/src/repr/board.rs index 8efebdf..8a57052 100644 --- a/src/repr/board.rs +++ b/src/repr/board.rs @@ -89,6 +89,7 @@ impl fmt::Display for Board { } writeln!(f)?; } + // put a line at the bottom of the board too writeln!(f, " {}", horiz_sep_line)?; @@ -112,6 +113,7 @@ impl fmt::Debug for Board { } impl Board { + /// Width of the board pub const BOARD_SIZE: CoordAxis = 8; /// Area of the board diff --git a/src/repr/coords.rs b/src/repr/coords.rs index ed318be..3ad43d2 100644 --- a/src/repr/coords.rs +++ b/src/repr/coords.rs @@ -2,11 +2,11 @@ use super::Board; use num::Integer; use static_assertions::const_assert; -// PERF! having `Coord` be of type `u8` (instead of usize) increases -// performance by about 1-2% overall +/// PERF! having `Coord` be of type `u8` (instead of usize) increases +/// performance by about 1-2% overall pub type CoordAxis = u8; -// using u8 for this results in a ~3-6% perf increase +/// using u8 for this results in a ~3-6% perf increase pub type CoordPairInner = u8; const_assert!(CoordPairInner::MAX as usize >= Board::BOARD_AREA as usize); @@ -19,6 +19,10 @@ impl CoordPair { pub const fn from_axes(row: CoordAxis, col: CoordAxis) -> Self { Self(row * Board::BOARD_SIZE + col) } + + fn from_index(&self) -> (CoordAxis, CoordAxis) { + self.0.div_mod_floor(&Board::BOARD_SIZE) + } } impl std::fmt::Display for CoordPair { @@ -34,8 +38,10 @@ impl std::fmt::Debug for CoordPair { } } -fn from_index(index: CoordPair) -> (CoordAxis, CoordAxis) { - index.0.div_mod_floor(&Board::BOARD_SIZE) +impl From for (CoordAxis, CoordAxis) { + fn from(val: CoordPair) -> Self { + val.from_index() + } } impl From<(CoordAxis, CoordAxis)> for CoordPair { @@ -44,12 +50,6 @@ impl From<(CoordAxis, CoordAxis)> for CoordPair { } } -impl From for (CoordAxis, CoordAxis) { - fn from(val: CoordPair) -> Self { - from_index(val) - } -} - #[cfg(test)] mod tests { use super::*;