pub struct Shape { /* private fields */ }Expand description
The shape of a regular board: the size of each of its dimensions.
Dimensions are ordered outermost first: for a 3D board, dimensions() is
[layers, ranks, files]; for 2D, [ranks, files]; for 1D, [files]. This
matches the FEEN separator depth — the deepest separator group splits the
outermost dimension.
A Shape holds between 1 and MAX_DIMENSIONS dimensions, each of size 1
to crate::MAX_DIMENSION_SIZE.
§Invariant
Entries beyond the active dimension count are always zero, so the derived equality and hashing compare only the meaningful dimensions.
Implementations§
Source§impl Shape
impl Shape
Sourcepub const fn new(dimensions: &[u8]) -> Option<Self>
pub const fn new(dimensions: &[u8]) -> Option<Self>
Builds a shape from its dimension sizes, outermost first.
Returns None if there are zero dimensions, more than MAX_DIMENSIONS,
or any dimension of size zero. (Sizes above crate::MAX_DIMENSION_SIZE
are unrepresentable, since each is a u8.)
§Examples
use sashite_feen::Shape;
let s = Shape::new(&[9, 9]).unwrap();
assert_eq!(s.dimensions(), &[9, 9]);
assert_eq!(s.dimension_count(), 2);
assert_eq!(s.square_count(), 81);
assert!(Shape::new(&[]).is_none()); // need at least one dimension
assert!(Shape::new(&[2, 2, 2, 2]).is_none()); // too many dimensions
assert!(Shape::new(&[8, 0]).is_none()); // a dimension cannot be emptySourcepub fn dimensions(&self) -> &[u8]
pub fn dimensions(&self) -> &[u8]
Returns the dimension sizes, outermost first (length 1 to
MAX_DIMENSIONS).
Sourcepub const fn dimension_count(&self) -> usize
pub const fn dimension_count(&self) -> usize
Returns the number of dimensions (1, 2, or 3).
Sourcepub const fn square_count(&self) -> u32
pub const fn square_count(&self) -> u32
Returns the total number of squares: the product of the dimension sizes.
The maximum is 255^3 = 16_581_375, which fits comfortably in a u32.