//// Types
////
+/// struct checkInfo is initialized at c'tor time and keeps
+/// info used to detect if a move gives check.
+
+struct CheckInfo {
+
+ CheckInfo(const Position&);
+
+ Square ksq;
+ Bitboard dc;
+ Bitboard checkSq[8];
+};
+
/// Castle rights, encoded as bit fields
enum CastleRights {
/// must be passed as a parameter.
struct StateInfo {
- Key key, pawnKey, materialKey;
+ Key pawnKey, materialKey;
int castleRights, rule50, pliesFromNull;
Square epSquare;
Score value;
Value npMaterial[2];
+ Key key;
PieceType capture;
Bitboard checkersBB;
StateInfo* previous;
Score value() const;
Value non_pawn_material(Color c) const;
Phase game_phase() const;
- template<GamePhase> Value pst_delta(Piece piece, Square from, Square to) const;
+ 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
- template<GamePhase> Value pst(Color c, PieceType pt, Square s) const;
- template<GamePhase> Value compute_value() const;
+ Score pst(Color c, PieceType pt, Square s) const;
+ Score compute_value() const;
Value compute_non_pawn_material(Color c) const;
// Board
static Key zobCastle[16];
static Key zobMaterial[2][8][16];
static Key zobSideToMove;
- static Value MgPieceSquareTable[16][64];
- static Value EgPieceSquareTable[16][64];
+ static Score PieceSquareTable[16][64];
};
return st->materialKey;
}
-template<Position::GamePhase Ph>
-inline Value Position::pst(Color c, PieceType pt, Square s) const {
- return (Ph == MidGame ? MgPieceSquareTable[piece_of_color_and_type(c, pt)][s]
- : EgPieceSquareTable[piece_of_color_and_type(c, pt)][s]);
+inline Score Position::pst(Color c, PieceType pt, Square s) const {
+ return PieceSquareTable[piece_of_color_and_type(c, pt)][s];
}
-template<Position::GamePhase Ph>
-inline Value Position::pst_delta(Piece piece, Square from, Square to) const {
- return (Ph == MidGame ? MgPieceSquareTable[piece][to] - MgPieceSquareTable[piece][from]
- : EgPieceSquareTable[piece][to] - EgPieceSquareTable[piece][from]);
+inline Score Position::pst_delta(Piece piece, Square from, Square to) const {
+ return PieceSquareTable[piece][to] - PieceSquareTable[piece][from];
}
inline Score Position::value() const {