use shogi_core::{Color, Piece, Square};
use crate::bitboard::Bitboard;
use crate::position::Position;
#[inline(always)]
pub fn lance_attacks(color: Color, square: Square, occupied: Bitboard) -> Bitboard {
crate::tables::lance_attacks(color, square, occupied)
}
#[inline(always)]
pub fn bishop_attacks(square: Square, occupied: Bitboard) -> Bitboard {
crate::tables::bishop_attacks(square, occupied)
}
#[inline(always)]
pub fn rook_attacks(square: Square, occupied: Bitboard) -> Bitboard {
crate::tables::rook_attacks(square, occupied)
}
#[inline(always)]
pub fn attacks_of(piece: Piece, square: Square, occupied: Bitboard) -> Bitboard {
crate::tables::attacks_of(piece, square, occupied)
}
pub mod backends {
use shogi_core::Square;
use crate::bitboard::Bitboard;
macro_rules! expose {
($module:ident) => {
pub mod $module {
use super::{Bitboard, Square};
#[inline(always)]
pub fn bishop_attacks(square: Square, occupied: Bitboard) -> Bitboard {
crate::sliders::$module::bishop_attacks(square, occupied)
}
#[inline(always)]
pub fn rook_attacks(square: Square, occupied: Bitboard) -> Bitboard {
crate::sliders::$module::rook_attacks(square, occupied)
}
}
};
}
expose!(naive);
expose!(qugiy);
expose!(magic);
}
#[inline(always)]
pub fn attackers_to(
position: &Position,
square: Square,
occupied: Bitboard,
attackers_color: Color,
mask: Bitboard,
) -> Bitboard {
crate::movegen::attackers_to(position, square, occupied, attackers_color, mask)
}