mirror of
https://github.com/sockspls/badfish
synced 2025-07-11 19:49:14 +00:00
Micro optimize Position::move_is_check()
More then optimization it is worth a bit of better code self documenting. No functional change. Signed-off-by: Marco Costalba <mcostalba@gmail.com>
This commit is contained in:
parent
b35e593551
commit
ab69f50c64
2 changed files with 11 additions and 6 deletions
|
@ -74,6 +74,13 @@ inline SignedDirection signed_direction_between_squares(Square s1, Square s2) {
|
||||||
return SignedDirection(SignedDirectionTable[s1][s2]);
|
return SignedDirection(SignedDirectionTable[s1][s2]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
inline bool direction_is_diagonal(Square s1, Square s2) {
|
||||||
|
return DirectionTable[s1][s2] & 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline bool direction_is_straight(Square s1, Square s2) {
|
||||||
|
return DirectionTable[s1][s2] < 2;
|
||||||
|
}
|
||||||
|
|
||||||
////
|
////
|
||||||
//// Prototypes
|
//// Prototypes
|
||||||
|
|
|
@ -599,19 +599,17 @@ bool Position::move_is_check(Move m, Bitboard dcCandidates) const {
|
||||||
|
|
||||||
case BISHOP:
|
case BISHOP:
|
||||||
return (dcCandidates && bit_is_set(dcCandidates, from))
|
return (dcCandidates && bit_is_set(dcCandidates, from))
|
||||||
|| ( direction_between_squares(ksq, to) != DIR_NONE
|
|| (direction_is_diagonal(ksq, to) && bit_is_set(piece_attacks<BISHOP>(ksq), to));
|
||||||
&& bit_is_set(piece_attacks<BISHOP>(ksq), to));
|
|
||||||
|
|
||||||
case ROOK:
|
case ROOK:
|
||||||
return (dcCandidates && bit_is_set(dcCandidates, from))
|
return (dcCandidates && bit_is_set(dcCandidates, from))
|
||||||
|| ( direction_between_squares(ksq, to) != DIR_NONE
|
|| (direction_is_straight(ksq, to) && bit_is_set(piece_attacks<ROOK>(ksq), to));
|
||||||
&& bit_is_set(piece_attacks<ROOK>(ksq), to));
|
|
||||||
|
|
||||||
case QUEEN:
|
case QUEEN:
|
||||||
// Discovered checks are impossible!
|
// Discovered checks are impossible!
|
||||||
assert(!bit_is_set(dcCandidates, from));
|
assert(!bit_is_set(dcCandidates, from));
|
||||||
return ( direction_between_squares(ksq, to) != DIR_NONE
|
return ( (direction_is_straight(ksq, to) && bit_is_set(piece_attacks<ROOK>(ksq), to))
|
||||||
&& bit_is_set(piece_attacks<QUEEN>(ksq), to));
|
|| (direction_is_diagonal(ksq, to) && bit_is_set(piece_attacks<BISHOP>(ksq), to)));
|
||||||
|
|
||||||
case KING:
|
case KING:
|
||||||
// Discovered check?
|
// Discovered check?
|
||||||
|
|
Loading…
Add table
Reference in a new issue