[bitboard] Implement From<File>, From<Rank> for BitBoard and TryFrom<BitBoard> for Square
This commit is contained in:
parent
997621eea7
commit
742b00119a
1 changed files with 30 additions and 1 deletions
|
@ -2,7 +2,7 @@
|
|||
|
||||
use crate::library;
|
||||
use crate::{LeadingBitScanner, TrailingBitScanner};
|
||||
use chessfriend_core::{Color, Direction, Square};
|
||||
use chessfriend_core::{Color, Direction, File, Rank, Square};
|
||||
use std::fmt;
|
||||
use std::ops::Not;
|
||||
|
||||
|
@ -158,6 +158,18 @@ impl Default for BitBoard {
|
|||
}
|
||||
}
|
||||
|
||||
impl From<File> for BitBoard {
|
||||
fn from(value: File) -> Self {
|
||||
library::FILES[*value.as_index() as usize]
|
||||
}
|
||||
}
|
||||
|
||||
impl From<Rank> for BitBoard {
|
||||
fn from(value: Rank) -> Self {
|
||||
library::FILES[*value.as_index() as usize]
|
||||
}
|
||||
}
|
||||
|
||||
impl From<Square> for BitBoard {
|
||||
fn from(value: Square) -> Self {
|
||||
BitBoard(1u64 << value as u32)
|
||||
|
@ -176,6 +188,23 @@ impl FromIterator<Square> for BitBoard {
|
|||
}
|
||||
}
|
||||
|
||||
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
|
||||
pub enum TryFromBitBoardError {
|
||||
NotSingleSquare,
|
||||
}
|
||||
|
||||
impl TryFrom<BitBoard> for Square {
|
||||
type Error = TryFromBitBoardError;
|
||||
|
||||
fn try_from(value: BitBoard) -> Result<Self, Self::Error> {
|
||||
if !value.is_single_square() {
|
||||
return Err(TryFromBitBoardError::NotSingleSquare);
|
||||
}
|
||||
|
||||
unsafe { Ok(Square::from_index(value.0.trailing_zeros() as u8)) }
|
||||
}
|
||||
}
|
||||
|
||||
impl fmt::Binary for BitBoard {
|
||||
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||
// Delegate to u64's implementation of Binary.
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue