implemented method collect_all_moves in bitboard::movegen used in move generation
This commit is contained in:
@@ -12,17 +12,34 @@ use super::utils::*;
|
||||
|
||||
impl Board {
|
||||
|
||||
const NO_FILTER: u64 = 0xFFFF_FFFF_FFFF_FFFF;
|
||||
|
||||
pub fn collect_moves(&mut self, buffer: &mut MoveBuffer, temp_buffer: &mut MoveBuffer) -> bool {
|
||||
buffer.clear();
|
||||
self.calc_pinned_squares();
|
||||
let check_info = self.check_test();
|
||||
|
||||
match check_info.check_count {
|
||||
// 0 => self.collect_all_moves(),
|
||||
0 => self.collect_all_moves(buffer, temp_buffer),
|
||||
// 1 => self.collect_moves_single_check(),
|
||||
// 2 => self.collect_king_evasion(),
|
||||
_ => panic!("More than 2 checking pieces found as the same time!")
|
||||
}
|
||||
return check_info.check_count > 0;
|
||||
}
|
||||
|
||||
pub(in super) fn collect_all_moves(&self, buffer: &mut MoveBuffer, temp_buffer: &mut MoveBuffer) {
|
||||
let safe_squares = self.get_safe_king_squares();
|
||||
|
||||
self.add_pawn_moves(buffer, temp_buffer, Self::NO_FILTER);
|
||||
self.add_knight_moves(buffer, temp_buffer, Self::NO_FILTER);
|
||||
self.add_bishop_moves(buffer, temp_buffer, Self::NO_FILTER);
|
||||
self.add_rook_moves(buffer, temp_buffer, Self::NO_FILTER);
|
||||
self.add_queen_moves(buffer, temp_buffer, Self::NO_FILTER);
|
||||
self.add_king_moves(buffer, temp_buffer, safe_squares);
|
||||
self.add_king_castles(buffer, safe_squares);
|
||||
|
||||
buffer.append(temp_buffer);
|
||||
temp_buffer.clear();
|
||||
}
|
||||
}
|
||||
@@ -2,7 +2,7 @@ use super::*;
|
||||
|
||||
impl Board {
|
||||
|
||||
fn add_bishop_moves(&self, capture_buffer: &mut MoveBuffer, quiet_buffer: &mut MoveBuffer, move_mask: u64) {
|
||||
pub fn add_bishop_moves(&self, capture_buffer: &mut MoveBuffer, quiet_buffer: &mut MoveBuffer, move_mask: u64) {
|
||||
let piece_index = 2 + self.side_to_move * 6;
|
||||
let mut bishops = self.bitboards[piece_index as usize];
|
||||
let empty = !self.occupancy[2];
|
||||
@@ -33,7 +33,7 @@ impl Board {
|
||||
}
|
||||
}
|
||||
}
|
||||
fn add_bishop_captures(&self, buffer: &mut MoveBuffer, move_mask: u64) {
|
||||
pub fn add_bishop_captures(&self, buffer: &mut MoveBuffer, move_mask: u64) {
|
||||
let offset = 6 * self.side_to_move as usize;
|
||||
let mut bishops: u64 = self.bitboards[2 + offset];
|
||||
let opponents = self.occupancy[1 - self.side_to_move as usize];
|
||||
|
||||
@@ -2,7 +2,7 @@ use super::*;
|
||||
|
||||
impl Board {
|
||||
|
||||
fn add_king_moves(&self, capture_buffer: &mut MoveBuffer, quiet_buffer: &mut MoveBuffer, move_mask: u64) {
|
||||
pub fn add_king_moves(&self, capture_buffer: &mut MoveBuffer, quiet_buffer: &mut MoveBuffer, move_mask: u64) {
|
||||
let piece_index = 5 + self.side_to_move * 6;
|
||||
let mut kings = self.bitboards[piece_index as usize];
|
||||
let empty = !self.occupancy[2];
|
||||
@@ -32,7 +32,7 @@ impl Board {
|
||||
}
|
||||
}
|
||||
}
|
||||
fn add_king_captures(&self, buffer: &mut MoveBuffer, move_mask: u64) {
|
||||
pub fn add_king_captures(&self, buffer: &mut MoveBuffer, move_mask: u64) {
|
||||
let offset = 6 * self.side_to_move as usize;
|
||||
let mut kings: u64 = self.bitboards[5 + offset];
|
||||
let opponents = self.occupancy[1 - self.side_to_move as usize];
|
||||
@@ -51,7 +51,7 @@ impl Board {
|
||||
}
|
||||
}
|
||||
}
|
||||
fn add_king_castles(&self, buffer: &mut MoveBuffer, move_mask: u64) {
|
||||
pub fn add_king_castles(&self, buffer: &mut MoveBuffer, move_mask: u64) {
|
||||
if self.castling_rights & (0b11 << (2 - 2 * self.side_to_move)) == 0 {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -2,7 +2,7 @@ use super::*;
|
||||
|
||||
impl Board {
|
||||
|
||||
fn add_knight_moves(&self, capture_buffer: &mut MoveBuffer, quiet_buffer: &mut MoveBuffer, move_mask: u64) {
|
||||
pub fn add_knight_moves(&self, capture_buffer: &mut MoveBuffer, quiet_buffer: &mut MoveBuffer, move_mask: u64) {
|
||||
let piece_index = 1 + self.side_to_move * 6;
|
||||
let mut knights = self.bitboards[piece_index as usize];
|
||||
let empty = !self.occupancy[2];
|
||||
@@ -33,7 +33,7 @@ impl Board {
|
||||
}
|
||||
}
|
||||
}
|
||||
fn add_knight_captures(&self, buffer: &mut MoveBuffer, move_mask: u64) {
|
||||
pub fn add_knight_captures(&self, buffer: &mut MoveBuffer, move_mask: u64) {
|
||||
let offset = 6 * self.side_to_move as usize;
|
||||
let mut knights: u64 = self.bitboards[1 + offset];
|
||||
let opponents = self.occupancy[1 - self.side_to_move as usize];
|
||||
|
||||
@@ -2,7 +2,7 @@ use super::*;
|
||||
|
||||
impl Board {
|
||||
|
||||
fn add_pawn_quiets(&self, buffer: &mut MoveBuffer, move_mask: u64) {
|
||||
pub fn add_pawn_quiets(&self, buffer: &mut MoveBuffer, move_mask: u64) {
|
||||
let offset: u8 = self.side_to_move * 6;
|
||||
let mut pawns: u64 = self.bitboards[offset as usize];
|
||||
while pawns != 0 {
|
||||
@@ -34,7 +34,7 @@ impl Board {
|
||||
}
|
||||
}
|
||||
}
|
||||
fn add_pawn_captures(&self, buffer: &mut MoveBuffer, move_mask: u64) {
|
||||
pub fn add_pawn_captures(&self, buffer: &mut MoveBuffer, move_mask: u64) {
|
||||
let offset = 6 * self.side_to_move as usize;
|
||||
let mut pawns: u64 = self.bitboards[offset];
|
||||
let opponents = self.occupancy[1 - self.side_to_move as usize];
|
||||
@@ -69,7 +69,7 @@ impl Board {
|
||||
}
|
||||
}
|
||||
}
|
||||
fn add_pawn_moves(&self, capture_buffer: &mut MoveBuffer, quiet_buffer: &mut MoveBuffer, move_mask: u64) {
|
||||
pub fn add_pawn_moves(&self, capture_buffer: &mut MoveBuffer, quiet_buffer: &mut MoveBuffer, move_mask: u64) {
|
||||
self.add_pawn_captures(capture_buffer, move_mask);
|
||||
self.add_pawn_quiets(quiet_buffer, move_mask);
|
||||
}
|
||||
|
||||
@@ -2,7 +2,7 @@ use super::*;
|
||||
|
||||
impl Board {
|
||||
|
||||
fn add_queen_moves(&self, capture_buffer: &mut MoveBuffer, quiet_buffer: &mut MoveBuffer, move_mask: u64) {
|
||||
pub fn add_queen_moves(&self, capture_buffer: &mut MoveBuffer, quiet_buffer: &mut MoveBuffer, move_mask: u64) {
|
||||
let piece_index = 4 + self.side_to_move * 6;
|
||||
let mut queens = self.bitboards[piece_index as usize];
|
||||
let empty = !self.occupancy[2];
|
||||
@@ -33,7 +33,7 @@ impl Board {
|
||||
}
|
||||
}
|
||||
}
|
||||
fn add_queen_captures(&self, buffer: &mut MoveBuffer, move_mask: u64) {
|
||||
pub fn add_queen_captures(&self, buffer: &mut MoveBuffer, move_mask: u64) {
|
||||
let offset = 6 * self.side_to_move as usize;
|
||||
let mut queens: u64 = self.bitboards[4 + offset];
|
||||
let opponents = self.occupancy[1 - self.side_to_move as usize];
|
||||
|
||||
@@ -2,7 +2,7 @@ use super::*;
|
||||
|
||||
impl Board {
|
||||
|
||||
fn add_rook_moves(&self, capture_buffer: &mut MoveBuffer, quiet_buffer: &mut MoveBuffer, move_mask: u64) {
|
||||
pub fn add_rook_moves(&self, capture_buffer: &mut MoveBuffer, quiet_buffer: &mut MoveBuffer, move_mask: u64) {
|
||||
let piece_index = 3 + self.side_to_move * 6;
|
||||
let mut rooks = self.bitboards[piece_index as usize];
|
||||
let empty = !self.occupancy[2];
|
||||
@@ -33,7 +33,7 @@ impl Board {
|
||||
}
|
||||
}
|
||||
}
|
||||
fn add_rook_captures(&self, buffer: &mut MoveBuffer, move_mask: u64) {
|
||||
pub fn add_rook_captures(&self, buffer: &mut MoveBuffer, move_mask: u64) {
|
||||
let offset = 6 * self.side_to_move as usize;
|
||||
let mut rooks: u64 = self.bitboards[3 + offset];
|
||||
let opponents = self.occupancy[1 - self.side_to_move as usize];
|
||||
|
||||
Reference in New Issue
Block a user