Key compute_material_key() const;
// Computing incremental evaluation scores and material counts
- Value mg_pst(Color c, PieceType pt, Square s) const;
- Value eg_pst(Color c, PieceType pt, Square s) const;
- Value compute_mg_value() const;
- Value compute_eg_value() const;
+ enum GamePhase {
+ MidGame,
+ EndGame
+ };
+ template<GamePhase> Value pst(Color c, PieceType pt, Square s) const;
+ template<GamePhase> Value compute_value() const;
Value compute_non_pawn_material(Color c) const;
// Bitboards
return materialKey;
}
-inline Value Position::mg_pst(Color c, PieceType pt, Square s) const {
- return MgPieceSquareTable[piece_of_color_and_type(c, pt)][s];
+template<Position::GamePhase Phase>
+inline Value Position::pst(Color c, PieceType pt, Square s) const {
+ return (Phase == MidGame ? MgPieceSquareTable[piece_of_color_and_type(c, pt)][s]
+ : EgPieceSquareTable[piece_of_color_and_type(c, pt)][s]);
}
inline Value Position::mg_pst_delta(Move m) const {
-MgPieceSquareTable[piece_on(move_from(m))][move_from(m)];
}
-inline Value Position::eg_pst(Color c, PieceType pt, Square s) const {
- return EgPieceSquareTable[piece_of_color_and_type(c, pt)][s];
-}
-
inline Value Position::mg_value() const {
return mgValue;
}