assert(pos.piece_on(s) == piece_of_color_and_type(Us, PAWN));
// Passed, isolated or doubled pawn?
- passed = Position::pawn_is_passed(theirPawns, Us, s);
- isolated = Position::pawn_is_isolated(ourPawns, s);
- doubled = Position::pawn_is_doubled(ourPawns, Us, s);
+ passed = !(theirPawns & passed_pawn_mask(Us, s));
+ isolated = !(ourPawns & neighboring_files_bb(s));
+ doubled = ourPawns & squares_behind(Us, s);
// We calculate kingside and queenside pawn storm
// scores for both colors. These are used when evaluating
// Information about pawns
bool pawn_is_passed(Color c, Square s) const;
- static bool pawn_is_passed(Bitboard theirPawns, Color c, Square s);
- static bool pawn_is_isolated(Bitboard ourPawns, Square s);
- static bool pawn_is_doubled(Bitboard ourPawns, Color c, Square s);
// Weak squares
bool square_is_weak(Square s, Color c) const;
return !(pieces(PAWN, opposite_color(c)) & passed_pawn_mask(c, s));
}
-inline bool Position::pawn_is_passed(Bitboard theirPawns, Color c, Square s) {
- return !(theirPawns & passed_pawn_mask(c, s));
-}
-
-inline bool Position::pawn_is_isolated(Bitboard ourPawns, Square s) {
- return !(ourPawns & neighboring_files_bb(s));
-}
-
-inline bool Position::pawn_is_doubled(Bitboard ourPawns, Color c, Square s) {
- return ourPawns & squares_behind(c, s);
-}
-
inline bool Position::square_is_weak(Square s, Color c) const {
return !(pieces(PAWN, c) & outpost_mask(opposite_color(c), s));
}