bool square_is_weak(Square s, Color c) const;
// Doing and undoing moves
- void backup(UndoInfo &u) const;
- void restore(const UndoInfo &u);
void do_move(Move m, UndoInfo &u);
void undo_move(Move m, const UndoInfo &u);
void do_null_move(UndoInfo &u);
Key compute_material_key() const;
// Computing incremental evaluation scores and material counts
+ enum GamePhase {
+ MidGame,
+ EndGame
+ };
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;
+ Value compute_value(GamePhase p) const;
Value compute_non_pawn_material(Color c) const;
// Bitboards
File initialKFile, initialKRFile, initialQRFile;
// Info backed up in do_move()
- mutable Bitboard pinners[2], pinned[2], dcCandidates[2];
- Bitboard checkersBB;
- Key key, pawnKey, materialKey;
- int castleRights, rule50;
- Square epSquare;
- Move lastMove;
- Value mgValue, egValue;
+ union {
+ UndoInfo undoInfoUnion;
+ struct { // Must have the same layout of UndoInfo
+ mutable Bitboard pinners[2], pinned[2], dcCandidates[2];
+ Bitboard checkersBB;
+ Key key, pawnKey, materialKey;
+ int castleRights, rule50;
+ Square epSquare;
+ Move lastMove;
+ Value mgValue, egValue;
+ PieceType capture;
+ };
+ };
// Static variables
static int castleRightsMask[64];