struct StateInfo {
Key key, pawnKey, materialKey;
- int castleRights, rule50;
- Square kingSquare[2], epSquare;
- Value mgValue, egValue;
+ int castleRights, rule50, pliesFromNull;
+ Square epSquare;
+ Score value;
Value npMaterial[2];
PieceType capture;
// Piece lists
Square piece_list(Color c, PieceType pt, int index) const;
+ const Square* piece_list_begin(Color c, PieceType pt) const;
// Information about attacks to or from a given square
Bitboard attackers_to(Square s) const;
template<PieceType> Bitboard attacks_from(Square s, Color c) const;
// Properties of moves
- bool pl_move_is_legal(Move m) const;
bool pl_move_is_legal(Move m, Bitboard pinned) const;
+ bool pl_move_is_evasion(Move m, Bitboard pinned) const;
bool move_is_check(Move m) const;
bool move_is_check(Move m, Bitboard dcCandidates) const;
bool move_is_capture(Move m) const;
+ bool move_is_capture_or_promotion(Move m) const;
bool move_is_passed_pawn_push(Move m) const;
bool move_attacks_square(Move m, Square s) const;
Key get_material_key() const;
// Incremental evaluation
- Value mg_value() const;
- Value eg_value() const;
+ 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;
- // Bitboards
- Bitboard byColorBB[2], byTypeBB[8];
-
// Board
Piece board[64];
+ // Bitboards
+ Bitboard byTypeBB[8], byColorBB[2];
+
// Piece counts
int pieceCount[2][8]; // [color][pieceType]
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 pieceList[c][pt][index];
}
+inline const Square* Position::piece_list_begin(Color c, PieceType pt) const {
+ return pieceList[c][pt];
+}
+
inline Square Position::ep_square() const {
return st->epSquare;
}
inline Square Position::king_square(Color c) const {
- return st->kingSquare[c];
+ return pieceList[c][KING][0];
}
inline bool Position::can_castle_kingside(Color side) const {
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 Value Position::mg_value() const {
- return st->mgValue;
-}
-
-inline Value Position::eg_value() const {
- return st->egValue;
+inline Score Position::value() const {
+ return st->value;
}
inline Value Position::non_pawn_material(Color c) const {
inline bool Position::move_is_capture(Move m) const {
// Move must not be MOVE_NONE !
+ return (m & (3 << 15)) ? !move_is_castle(m) : !square_is_empty(move_to(m));
+}
- return (!square_is_empty(move_to(m)) && !move_is_castle(m)) || move_is_ep(m);
+inline bool Position::move_is_capture_or_promotion(Move m) const {
+
+ // Move must not be MOVE_NONE !
+ return (m & (0x1F << 12)) ? !move_is_castle(m) : !square_is_empty(move_to(m));
}
#endif // !defined(POSITION_H_INCLUDED)