X-Git-Url: https://git.sesse.net/?p=stockfish;a=blobdiff_plain;f=src%2Fbitboard.h;h=349005787fd402d6ab958818f46e1262fc4b8356;hp=3afbeedfbab42ee086000de51a4964350b34bea5;hb=034a2b04f2fc1017721b4f3fc12895e5f8a190bd;hpb=14f47c8ac6a77b9638008a9b61009dd6852be4d6 diff --git a/src/bitboard.h b/src/bitboard.h index 3afbeedf..34900578 100644 --- a/src/bitboard.h +++ b/src/bitboard.h @@ -74,6 +74,7 @@ extern Bitboard AdjacentFilesBB[FILE_NB]; extern Bitboard InFrontBB[COLOR_NB][RANK_NB]; extern Bitboard StepAttacksBB[PIECE_NB][SQUARE_NB]; extern Bitboard BetweenBB[SQUARE_NB][SQUARE_NB]; +extern Bitboard LineBB[SQUARE_NB][SQUARE_NB]; extern Bitboard DistanceRingsBB[SQUARE_NB][8]; extern Bitboard ForwardBB[COLOR_NB][SQUARE_NB]; extern Bitboard PassedPawnMask[COLOR_NB][SQUARE_NB]; @@ -222,12 +223,11 @@ inline Bitboard squares_of_color(Square s) { } -/// squares_aligned() returns true if the squares s1, s2 and s3 are aligned +/// aligned() returns true if the squares s1, s2 and s3 are aligned /// either on a straight or on a diagonal line. -inline bool squares_aligned(Square s1, Square s2, Square s3) { - return (BetweenBB[s1][s2] | BetweenBB[s1][s3] | BetweenBB[s2][s3]) - & ( SquareBB[s1] | SquareBB[s2] | SquareBB[s3]); +inline bool aligned(Square s1, Square s2, Square s3) { + return LineBB[s1][s2] & s3; } @@ -254,6 +254,16 @@ inline Bitboard attacks_bb(Square s, Bitboard occ) { return (Pt == ROOK ? RAttacks : BAttacks)[s][magic_index(s, occ)]; } +inline Bitboard attacks_bb(Piece p, Square s, Bitboard occ) { + + switch (type_of(p)) + { + case BISHOP: return attacks_bb(s, occ); + case ROOK : return attacks_bb(s, occ); + case QUEEN : return attacks_bb(s, occ) | attacks_bb(s, occ); + default : return StepAttacksBB[p][s]; + } +} /// lsb()/msb() finds the least/most significant bit in a nonzero bitboard. /// pop_lsb() finds and clears the least significant bit in a nonzero bitboard.