Add 'NUM_VARIANTS' constant to all 'board' enums

This commit is contained in:
Bruno BELANYI 2022-07-20 19:19:38 +02:00
parent 407f85c19b
commit d919b956ed
5 changed files with 23 additions and 8 deletions

View file

@ -14,10 +14,13 @@ pub enum CastleRights {
}
impl CastleRights {
/// The number of [CastleRights] variants.
pub const NUM_VARIANTS: usize = 4;
/// Convert from a castle rights index into a [CastleRights] type.
#[inline(always)]
pub fn from_index(index: usize) -> Self {
assert!(index < 4);
assert!(index < Self::NUM_VARIANTS);
// SAFETY: we know the value is in-bounds
unsafe { Self::from_index_unchecked(index) }
}

View file

@ -8,10 +8,13 @@ pub enum Color {
}
impl Color {
/// The number of [Color] variants.
pub const NUM_VARIANTS: usize = 2;
/// Convert from a color index into a [Color] type.
#[inline(always)]
pub fn from_index(index: usize) -> Self {
assert!(index < 2);
assert!(index < Self::NUM_VARIANTS);
// SAFETY: we know the value is in-bounds
unsafe { Self::from_index_unchecked(index) }
}

View file

@ -15,7 +15,10 @@ pub enum File {
}
impl File {
const ALL: [Self; 8] = [
/// The number of [File] variants.
pub const NUM_VARIANTS: usize = 8;
const ALL: [Self; Self::NUM_VARIANTS] = [
Self::A,
Self::B,
Self::C,
@ -34,7 +37,7 @@ impl File {
/// Convert from a file index into a [File] type.
#[inline(always)]
pub fn from_index(index: usize) -> Self {
assert!(index < 8);
assert!(index < Self::NUM_VARIANTS);
// SAFETY: we know the value is in-bounds
unsafe { Self::from_index_unchecked(index) }
}

View file

@ -15,7 +15,10 @@ pub enum Rank {
}
impl Rank {
const ALL: [Self; 8] = [
/// The number of [Rank] variants.
pub const NUM_VARIANTS: usize = 8;
const ALL: [Self; Self::NUM_VARIANTS] = [
Self::First,
Self::Second,
Self::Third,
@ -34,7 +37,7 @@ impl Rank {
/// Convert from a rank index into a [Rank] type.
#[inline(always)]
pub fn from_index(index: usize) -> Self {
assert!(index < 8);
assert!(index < Self::NUM_VARIANTS);
// SAFETY: we know the value is in-bounds
unsafe { Self::from_index_unchecked(index) }
}

View file

@ -23,8 +23,11 @@ impl std::fmt::Display for Square {
}
impl Square {
/// The number of [Square] variants.
pub const NUM_VARIANTS: usize = 64;
#[rustfmt::skip]
const ALL: [Self; 64] = [
const ALL: [Self; Self::NUM_VARIANTS] = [
Self::A1, Self::A2, Self::A3, Self::A4, Self::A5, Self::A6, Self::A7, Self::A8,
Self::B1, Self::B2, Self::B3, Self::B4, Self::B5, Self::B6, Self::B7, Self::B8,
Self::C1, Self::C2, Self::C3, Self::C4, Self::C5, Self::C6, Self::C7, Self::C8,
@ -50,7 +53,7 @@ impl Square {
/// Convert from a square index into a [Square] type.
#[inline(always)]
pub fn from_index(index: usize) -> Self {
assert!(index < 64);
assert!(index < Self::NUM_VARIANTS);
// SAFETY: we know the value is in-bounds
unsafe { Self::from_index_unchecked(index) }
}