Struct shakmaty::PositionErrorKinds
source · pub struct PositionErrorKinds(/* private fields */);
Expand description
Reasons for a Setup
not being a legal Position
.
A position is legal if it can be reached with a sequence of legal moves from the starting position. All legal positions are accepted. However, it is not feasible (or even always deseriable) to reject all illegal positions.
Instead, the validity requirements here are chosen based on practical considerations: Are shakmaty, as well as common chess software (in particular Stockfish and Lichess) able to correctly handle the position, and are they likely to continue to do so in future versions?
Implementations§
source§impl PositionErrorKinds
impl PositionErrorKinds
sourcepub const EMPTY_BOARD: Self = _
pub const EMPTY_BOARD: Self = _
There are no pieces on the board.
sourcepub const MISSING_KING: Self = _
pub const MISSING_KING: Self = _
A king is required but missing.
sourcepub const TOO_MANY_KINGS: Self = _
pub const TOO_MANY_KINGS: Self = _
A player has too many kings.
sourcepub const PAWNS_ON_BACKRANK: Self = _
pub const PAWNS_ON_BACKRANK: Self = _
There are pawns on the backrank. Only Horde
allows players to
have pawns on their own backrank.
sourcepub const INVALID_CASTLING_RIGHTS: Self = _
pub const INVALID_CASTLING_RIGHTS: Self = _
Some castling rights are invalid for the selected CastlingMode
.
Can be recovered by discarding the invalid castling rights using
PositionError::ignore_invalid_castling_rights()
.
sourcepub const INVALID_EP_SQUARE: Self = _
pub const INVALID_EP_SQUARE: Self = _
The en passant square is on the wrong rank, not empty, or the allegedly pushed pawn is not present.
Can be recovered by discarding the invalid en passant square using
PositionError::ignore_invalid_ep_square()
.
sourcepub const OPPOSITE_CHECK: Self = _
pub const OPPOSITE_CHECK: Self = _
The player not to move is in check.
sourcepub const IMPOSSIBLE_CHECK: Self = _
pub const IMPOSSIBLE_CHECK: Self = _
There are impossibly many checkers, two sliding checkers are aligned, or check is not possible because the en passant square implies that the last move was a double pawn push.
Unlike PositionErrorKinds::OPPOSITE_CHECK
, this can be ignored
using PositionError::ignore_impossible_check()
, but note that
other software may not work correctly in such situations.
sourcepub const TOO_MUCH_MATERIAL: Self = _
pub const TOO_MUCH_MATERIAL: Self = _
The material configuration cannot be reached with any sequence of legal moves, because there is too much material.
Distinguishes light-squared and dark-squared bishops, pockets and promoted pieces in Crazyhouse, and pieces on the board. Does not consider their positions. Does not consider missing pieces in Crazyhouse.
This can be ignored using
PositionError::ignore_too_much_material()
, but note that
other software may not work correctly with too much material.
pub const IMPOSSIBLE_MATERIAL: Self = _
PositionErrorKinds::TOO_MUCH_MATERIAL
insteadsource§impl PositionErrorKinds
impl PositionErrorKinds
sourcepub const fn bits(&self) -> u32
pub const fn bits(&self) -> u32
Get the underlying bits value.
The returned value is exactly the bits set in this flags value.
sourcepub const fn from_bits(bits: u32) -> Option<Self>
pub const fn from_bits(bits: u32) -> Option<Self>
Convert from a bits value.
This method will return None
if any unknown bits are set.
sourcepub const fn from_bits_truncate(bits: u32) -> Self
pub const fn from_bits_truncate(bits: u32) -> Self
Convert from a bits value, unsetting any unknown bits.
sourcepub const fn from_bits_retain(bits: u32) -> Self
pub const fn from_bits_retain(bits: u32) -> Self
Convert from a bits value exactly.
sourcepub fn from_name(name: &str) -> Option<Self>
pub fn from_name(name: &str) -> Option<Self>
Get a flags value with the bits of a flag with the given name set.
This method will return None
if name
is empty or doesn’t
correspond to any named flag.
sourcepub const fn intersects(&self, other: Self) -> bool
pub const fn intersects(&self, other: Self) -> bool
Whether any set bits in a source flags value are also set in a target flags value.
sourcepub const fn contains(&self, other: Self) -> bool
pub const fn contains(&self, other: Self) -> bool
Whether all set bits in a source flags value are also set in a target flags value.
sourcepub fn remove(&mut self, other: Self)
pub fn remove(&mut self, other: Self)
The intersection of a source flags value with the complement of a target flags value (&!
).
This method is not equivalent to self & !other
when other
has unknown bits set.
remove
won’t truncate other
, but the !
operator will.
sourcepub fn toggle(&mut self, other: Self)
pub fn toggle(&mut self, other: Self)
The bitwise exclusive-or (^
) of the bits in two flags values.
sourcepub fn set(&mut self, other: Self, value: bool)
pub fn set(&mut self, other: Self, value: bool)
Call insert
when value
is true
or remove
when value
is false
.
sourcepub const fn intersection(self, other: Self) -> Self
pub const fn intersection(self, other: Self) -> Self
The bitwise and (&
) of the bits in two flags values.
sourcepub const fn union(self, other: Self) -> Self
pub const fn union(self, other: Self) -> Self
The bitwise or (|
) of the bits in two flags values.
sourcepub const fn difference(self, other: Self) -> Self
pub const fn difference(self, other: Self) -> Self
The intersection of a source flags value with the complement of a target flags value (&!
).
This method is not equivalent to self & !other
when other
has unknown bits set.
difference
won’t truncate other
, but the !
operator will.
sourcepub const fn symmetric_difference(self, other: Self) -> Self
pub const fn symmetric_difference(self, other: Self) -> Self
The bitwise exclusive-or (^
) of the bits in two flags values.
sourcepub const fn complement(self) -> Self
pub const fn complement(self) -> Self
The bitwise negation (!
) of the bits in a flags value, truncating the result.
source§impl PositionErrorKinds
impl PositionErrorKinds
sourcepub const fn iter(&self) -> Iter<PositionErrorKinds>
pub const fn iter(&self) -> Iter<PositionErrorKinds>
Yield a set of contained flags values.
Each yielded flags value will correspond to a defined named flag. Any unknown bits will be yielded together as a final flags value.
sourcepub const fn iter_names(&self) -> IterNames<PositionErrorKinds>
pub const fn iter_names(&self) -> IterNames<PositionErrorKinds>
Yield a set of contained named flags values.
This method is like iter
, except only yields bits in contained named flags.
Any unknown bits, or bits not corresponding to a contained flag will not be yielded.
Trait Implementations§
source§impl Binary for PositionErrorKinds
impl Binary for PositionErrorKinds
source§impl BitAnd for PositionErrorKinds
impl BitAnd for PositionErrorKinds
source§impl BitAndAssign for PositionErrorKinds
impl BitAndAssign for PositionErrorKinds
source§fn bitand_assign(&mut self, other: Self)
fn bitand_assign(&mut self, other: Self)
The bitwise and (&
) of the bits in two flags values.
source§impl BitOr for PositionErrorKinds
impl BitOr for PositionErrorKinds
source§fn bitor(self, other: PositionErrorKinds) -> Self
fn bitor(self, other: PositionErrorKinds) -> Self
The bitwise or (|
) of the bits in two flags values.
§type Output = PositionErrorKinds
type Output = PositionErrorKinds
|
operator.source§impl BitOrAssign for PositionErrorKinds
impl BitOrAssign for PositionErrorKinds
source§fn bitor_assign(&mut self, other: Self)
fn bitor_assign(&mut self, other: Self)
The bitwise or (|
) of the bits in two flags values.
source§impl BitXor for PositionErrorKinds
impl BitXor for PositionErrorKinds
source§impl BitXorAssign for PositionErrorKinds
impl BitXorAssign for PositionErrorKinds
source§fn bitxor_assign(&mut self, other: Self)
fn bitxor_assign(&mut self, other: Self)
The bitwise exclusive-or (^
) of the bits in two flags values.
source§impl Clone for PositionErrorKinds
impl Clone for PositionErrorKinds
source§fn clone(&self) -> PositionErrorKinds
fn clone(&self) -> PositionErrorKinds
1.0.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moresource§impl Debug for PositionErrorKinds
impl Debug for PositionErrorKinds
source§impl Extend<PositionErrorKinds> for PositionErrorKinds
impl Extend<PositionErrorKinds> for PositionErrorKinds
source§fn extend<T: IntoIterator<Item = Self>>(&mut self, iterator: T)
fn extend<T: IntoIterator<Item = Self>>(&mut self, iterator: T)
The bitwise or (|
) of the bits in each flags value.
source§fn extend_one(&mut self, item: A)
fn extend_one(&mut self, item: A)
extend_one
)source§fn extend_reserve(&mut self, additional: usize)
fn extend_reserve(&mut self, additional: usize)
extend_one
)source§impl Flags for PositionErrorKinds
impl Flags for PositionErrorKinds
source§const FLAGS: &'static [Flag<PositionErrorKinds>] = _
const FLAGS: &'static [Flag<PositionErrorKinds>] = _
source§fn from_bits_retain(bits: u32) -> PositionErrorKinds
fn from_bits_retain(bits: u32) -> PositionErrorKinds
source§fn from_bits_truncate(bits: Self::Bits) -> Self
fn from_bits_truncate(bits: Self::Bits) -> Self
source§fn from_name(name: &str) -> Option<Self>
fn from_name(name: &str) -> Option<Self>
source§fn iter_names(&self) -> IterNames<Self>
fn iter_names(&self) -> IterNames<Self>
source§fn intersects(&self, other: Self) -> boolwhere
Self: Sized,
fn intersects(&self, other: Self) -> boolwhere
Self: Sized,
source§fn contains(&self, other: Self) -> boolwhere
Self: Sized,
fn contains(&self, other: Self) -> boolwhere
Self: Sized,
source§fn insert(&mut self, other: Self)where
Self: Sized,
fn insert(&mut self, other: Self)where
Self: Sized,
|
) of the bits in two flags values.source§fn remove(&mut self, other: Self)where
Self: Sized,
fn remove(&mut self, other: Self)where
Self: Sized,
&!
). Read moresource§fn toggle(&mut self, other: Self)where
Self: Sized,
fn toggle(&mut self, other: Self)where
Self: Sized,
^
) of the bits in two flags values.source§fn intersection(self, other: Self) -> Self
fn intersection(self, other: Self) -> Self
&
) of the bits in two flags values.source§fn difference(self, other: Self) -> Self
fn difference(self, other: Self) -> Self
&!
). Read moresource§fn symmetric_difference(self, other: Self) -> Self
fn symmetric_difference(self, other: Self) -> Self
^
) of the bits in two flags values.source§fn complement(self) -> Self
fn complement(self) -> Self
!
) of the bits in a flags value, truncating the result.source§impl FromIterator<PositionErrorKinds> for PositionErrorKinds
impl FromIterator<PositionErrorKinds> for PositionErrorKinds
source§fn from_iter<T: IntoIterator<Item = Self>>(iterator: T) -> Self
fn from_iter<T: IntoIterator<Item = Self>>(iterator: T) -> Self
The bitwise or (|
) of the bits in each flags value.
source§impl Hash for PositionErrorKinds
impl Hash for PositionErrorKinds
source§impl IntoIterator for PositionErrorKinds
impl IntoIterator for PositionErrorKinds
source§impl LowerHex for PositionErrorKinds
impl LowerHex for PositionErrorKinds
source§impl Not for PositionErrorKinds
impl Not for PositionErrorKinds
source§impl Octal for PositionErrorKinds
impl Octal for PositionErrorKinds
source§impl PartialEq for PositionErrorKinds
impl PartialEq for PositionErrorKinds
source§fn eq(&self, other: &PositionErrorKinds) -> bool
fn eq(&self, other: &PositionErrorKinds) -> bool
self
and other
values to be equal, and is used
by ==
.source§impl PublicFlags for PositionErrorKinds
impl PublicFlags for PositionErrorKinds
source§impl Sub for PositionErrorKinds
impl Sub for PositionErrorKinds
source§fn sub(self, other: Self) -> Self
fn sub(self, other: Self) -> Self
The intersection of a source flags value with the complement of a target flags value (&!
).
This method is not equivalent to self & !other
when other
has unknown bits set.
difference
won’t truncate other
, but the !
operator will.
§type Output = PositionErrorKinds
type Output = PositionErrorKinds
-
operator.source§impl SubAssign for PositionErrorKinds
impl SubAssign for PositionErrorKinds
source§fn sub_assign(&mut self, other: Self)
fn sub_assign(&mut self, other: Self)
The intersection of a source flags value with the complement of a target flags value (&!
).
This method is not equivalent to self & !other
when other
has unknown bits set.
difference
won’t truncate other
, but the !
operator will.