make Setup::bitboards public
This commit is contained in:
parent
b45952b6b7
commit
b3eee18a16
3 changed files with 38 additions and 37 deletions
71
src/setup.rs
71
src/setup.rs
|
|
@ -231,7 +231,7 @@ impl Setup {
|
|||
#[inline]
|
||||
pub fn get(&self, square: Square) -> Option<Piece> {
|
||||
Some(Piece {
|
||||
role: self.get_role(square)?,
|
||||
role: self.role(square)?,
|
||||
color: match (self.w & square.bitboard()).is_empty() {
|
||||
false => Color::White,
|
||||
true => Color::Black,
|
||||
|
|
@ -318,6 +318,40 @@ impl Setup {
|
|||
self.en_passant = OptionSquare::new(square);
|
||||
}
|
||||
|
||||
/// Returns, for each color and each type of piece, the bitboard of all squares occupied.
|
||||
#[inline]
|
||||
pub fn bitboards(&self) -> ByColor<ByRole<Bitboard>> {
|
||||
let Self {
|
||||
w,
|
||||
p_b_q,
|
||||
n_b_k,
|
||||
r_q_k,
|
||||
..
|
||||
} = self.clone();
|
||||
let k = n_b_k & r_q_k;
|
||||
let q = p_b_q & r_q_k;
|
||||
let b = p_b_q & n_b_k;
|
||||
let n = n_b_k ^ b ^ k;
|
||||
let r = r_q_k ^ q ^ k;
|
||||
let p = p_b_q ^ b ^ q;
|
||||
ByColor::with(|color| {
|
||||
let mask = match color {
|
||||
Color::White => w,
|
||||
Color::Black => !w,
|
||||
};
|
||||
ByRole::with(|role| {
|
||||
mask & match role {
|
||||
Role::Pawn => p,
|
||||
Role::Knight => n,
|
||||
Role::Bishop => b,
|
||||
Role::Rook => r,
|
||||
Role::Queen => q,
|
||||
Role::King => k,
|
||||
}
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
/// Returns the mirror image of the position.
|
||||
///
|
||||
/// The mirror of a position is the position obtained after reflecting the placement of pieces
|
||||
|
|
@ -472,7 +506,7 @@ impl Setup {
|
|||
}
|
||||
|
||||
#[inline]
|
||||
pub(crate) fn get_role(&self, square: Square) -> Option<Role> {
|
||||
pub(crate) fn role(&self, square: Square) -> Option<Role> {
|
||||
let mask = square.bitboard();
|
||||
let bit0 = (self.p_b_q & mask).0 >> square as u8;
|
||||
let bit1 = (self.n_b_k & mask).0 >> square as u8;
|
||||
|
|
@ -482,39 +516,6 @@ impl Setup {
|
|||
i => Some(unsafe { Role::transmute(i as u8) }),
|
||||
}
|
||||
}
|
||||
|
||||
#[inline]
|
||||
pub(crate) fn bitboards(&self) -> ByColor<ByRole<Bitboard>> {
|
||||
let Self {
|
||||
w,
|
||||
p_b_q,
|
||||
n_b_k,
|
||||
r_q_k,
|
||||
..
|
||||
} = self.clone();
|
||||
let k = n_b_k & r_q_k;
|
||||
let q = p_b_q & r_q_k;
|
||||
let b = p_b_q & n_b_k;
|
||||
let n = n_b_k ^ b ^ k;
|
||||
let r = r_q_k ^ q ^ k;
|
||||
let p = p_b_q ^ b ^ q;
|
||||
ByColor::with(|color| {
|
||||
let mask = match color {
|
||||
Color::White => w,
|
||||
Color::Black => !w,
|
||||
};
|
||||
ByRole::with(|role| {
|
||||
mask & match role {
|
||||
Role::Pawn => p,
|
||||
Role::Knight => n,
|
||||
Role::Bishop => b,
|
||||
Role::Rook => r,
|
||||
Role::Queen => q,
|
||||
Role::King => k,
|
||||
}
|
||||
})
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
impl TryFrom<Setup> for Position {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue