score -= ThreatenedByPawnPenalty[Piece];
// Bishop and knight outposts squares
- if ((Piece == BISHOP || Piece == KNIGHT) && pos.square_is_weak(s, Us))
+ if ( (Piece == BISHOP || Piece == KNIGHT)
+ && !(pos.pieces(PAWN, Them) & attack_span_mask(Us, s)))
score += evaluate_outposts<Piece, Us>(pos, ei, s);
// Queen or rook on 7th rank
// Information about pawns
bool pawn_is_passed(Color c, Square s) const;
- // Weak squares
- bool square_is_weak(Square s, Color c) const;
-
// Doing and undoing moves
void do_setup_move(Move m);
void do_move(Move m, StateInfo& st);
// Incremental evaluation
Score value() const;
Value non_pawn_material(Color c) const;
- static Score pst_delta(Piece piece, Square from, Square to);
+ Score pst_delta(Piece piece, Square from, Square to) const;
// Game termination checks
bool is_mate() const;
Key compute_material_key() const;
// Computing incremental evaluation scores and material counts
- static Score pst(Piece p, Square s);
+ Score pst(Piece p, Square s) const;
Score compute_value() const;
Value compute_non_pawn_material(Color c) const;
return !(pieces(PAWN, opposite_color(c)) & passed_pawn_mask(c, s));
}
-inline bool Position::square_is_weak(Square s, Color c) const {
- return !(pieces(PAWN, opposite_color(c)) & attack_span_mask(c, s));
-}
-
inline Key Position::get_key() const {
return st->key;
}
return st->materialKey;
}
-inline Score Position::pst(Piece p, Square s) {
+inline Score Position::pst(Piece p, Square s) const {
return PieceSquareTable[p][s];
}
-inline Score Position::pst_delta(Piece piece, Square from, Square to) {
+inline Score Position::pst_delta(Piece piece, Square from, Square to) const {
return PieceSquareTable[piece][to] - PieceSquareTable[piece][from];
}
inline bool Position::opposite_colored_bishops() const {
- return piece_count(WHITE, BISHOP) == 1 && piece_count(BLACK, BISHOP) == 1
+ return piece_count(WHITE, BISHOP) == 1
+ && piece_count(BLACK, BISHOP) == 1
&& opposite_color_squares(piece_list(WHITE, BISHOP)[0], piece_list(BLACK, BISHOP)[0]);
}