X-Git-Url: https://git.sesse.net/?p=stockfish;a=blobdiff_plain;f=src%2Fposition.h;h=11b9e2de13991e75fc2d94c28d5123dfded556dd;hp=94b7003373d817fe6f40be5b13701b4197c6fd20;hb=f30aa83f8ad46a794e83f030fdab576371c8c825;hpb=683e6dc6566719f8737fad9bc30580bb0b4d8d20 diff --git a/src/position.h b/src/position.h index 94b70033..11b9e2de 100644 --- a/src/position.h +++ b/src/position.h @@ -74,17 +74,16 @@ enum CastleRights { /// The UndoInfo struct stores information we need to restore a Position -/// object to its previous state when we retract a move. Whenever a move +/// object to its previous state when we retract a move. Whenever a move /// is made on the board (by calling Position::do_move), an UndoInfo object -/// must be passed as a parameter. When the move is unmade (by calling +/// must be passed as a parameter. When the move is unmade (by calling /// Position::undo_move), the same UndoInfo object must be passed again. struct UndoInfo { - int castleRights; - Square epSquare; - Bitboard checkersBB, pinners[2], pinned[2], dcCandidates[2]; + Bitboard pinners[2], pinned[2], dcCandidates[2], checkersBB; Key key, pawnKey, materialKey; - int rule50; + int castleRights, rule50; + Square epSquare; Move lastMove; Value mgValue, egValue; PieceType capture; @@ -241,8 +240,6 @@ public: 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); @@ -318,16 +315,17 @@ private: 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 Bitboard byColorBB[2], byTypeBB[8]; - Bitboard checkersBB; - mutable Bitboard pinners[2], pinned[2], dcCandidates[2]; // Board Piece board[64]; @@ -340,16 +338,27 @@ private: int index[64]; // Other info - Color sideToMove; - int castleRights; - File initialKFile, initialKRFile, initialQRFile; - Square epSquare; Square kingSquare[2]; - Move lastMove; - Key key, pawnKey, materialKey, history[MaxGameLength]; - int rule50, gamePly; - Value mgValue, egValue; + Color sideToMove; + int gamePly; + Key history[MaxGameLength]; Value npMaterial[2]; + File initialKFile, initialKRFile, initialQRFile; + + // Info backed up in do_move() + 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];