X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Fposition.h;h=510784e593e8e1d5ab811d98177f295c6ada56e5;hb=3ed603cd;hp=4f18e67feeb37381c97534ec8abc0d7719167ebd;hpb=1f97b48a31cd60d71c5fb63541cbf3991a094443;p=stockfish diff --git a/src/position.h b/src/position.h index 4f18e67f..510784e5 100644 --- a/src/position.h +++ b/src/position.h @@ -79,14 +79,15 @@ enum CastleRights { /// must be passed as a parameter. struct StateInfo { - Bitboard pinners[2], pinned[2], dcCandidates[2], checkersBB; Key key, pawnKey, materialKey; int castleRights, rule50; Square epSquare; Value mgValue, egValue; + PieceType capture; - StateInfo* previous; + Bitboard checkersBB; Move lastMove; + StateInfo* previous; }; @@ -219,7 +220,9 @@ public: // Properties of moves bool pl_move_is_legal(Move m) const; + bool pl_move_is_legal(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_deep_pawn_push(Move m) const; bool move_is_pawn_push_to_7th(Move m) const; @@ -242,6 +245,7 @@ public: // Doing and undoing moves void setStartState(const StateInfo& st); void do_move(Move m, StateInfo& st); + void do_move(Move m, StateInfo& st, Bitboard dcCandidates); void undo_move(Move m); void do_null_move(StateInfo& st); void undo_null_move(); @@ -289,11 +293,6 @@ public: private: - enum { - Pinned = 1, - DcCandidates = 2 - }; - // Initialization helper functions (used while setting up a position) void clear(); void put_piece(Piece p, Square s); @@ -309,15 +308,12 @@ private: void undo_promotion_move(Move m); void undo_ep_move(Move m); void find_checkers(); - void find_hidden_checks(Color us, unsigned int types); - void find_hidden_checks(); - void update_hidden_checks(Square from, Square to); template void update_checkers(Bitboard* pCheckersBB, Square ksq, Square from, Square to, Bitboard dcCandidates); - template - Bitboard hidden_checks(Color c, Square ksq, Bitboard& pinners) const; + template + Bitboard hidden_checkers(Color c) const; // Computing hash keys from scratch (for initialization and debugging) Key compute_key() const; @@ -566,19 +562,6 @@ inline Bitboard Position::piece_attacks(Square s) const { return StepAttackBB[KING][s]; } -inline Bitboard Position::pinned_pieces(Color c) const { - return st->pinned[c]; -} - -inline Bitboard Position::pinned_pieces(Color c, Bitboard& p) const { - p = st->pinners[c]; - return st->pinned[c]; -} - -inline Bitboard Position::discovered_check_candidates(Color c) const { - return st->dcCandidates[c]; -} - inline Bitboard Position::checkers() const { return st->checkersBB; } @@ -667,15 +650,9 @@ inline Value Position::non_pawn_material(Color c) const { inline Phase Position::game_phase() const { - // The purpose of the Value(325) terms below is to make sure the difference - // between MidgameLimit and EndgameLimit is a power of 2, which should make - // the division at the end of the function a bit faster. - static const Value MidgameLimit = 2 * QueenValueMidgame - + 2 * RookValueMidgame - + 6 * BishopValueMidgame - + Value(325); - - static const Value EndgameLimit = 4 * RookValueMidgame - Value(325); + // Values modified by Joona Kiiski + static const Value MidgameLimit = Value(15713); + static const Value EndgameLimit = Value(4428); Value npm = non_pawn_material(WHITE) + non_pawn_material(BLACK);