]> git.sesse.net Git - stockfish/blobdiff - src/position.h
Super fast hidden_checkers()
[stockfish] / src / position.h
index 8d1ba3598c2da91c9252bbdf39efa3be3fea3fda..ac63c11c36e612a09aa59b4e779b39bc1c74fb2e 100644 (file)
@@ -79,13 +79,14 @@ 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;
-  Move lastMove;
   Value mgValue, egValue;
+
   PieceType capture;
+  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;
@@ -240,7 +243,9 @@ public:
   bool square_is_weak(Square s, Color c) const;
 
   // 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();
@@ -287,6 +292,7 @@ public:
   static void init_piece_square_tables();
 
 private:
+
   // Initialization helper functions (used while setting up a position)
   void clear();
   void put_piece(Piece p, Square s);
@@ -306,8 +312,8 @@ private:
   template<PieceType Piece>
   void update_checkers(Bitboard* pCheckersBB, Square ksq, Square from, Square to, Bitboard dcCandidates);
 
-  template<PieceType Piece, bool FindPinned>
-  Bitboard hidden_checks(Color c, Square ksq, Bitboard& pinners) const;
+  template<bool FindPinned>
+  Bitboard hidden_checkers(Color c) const;
 
   // Computing hash keys from scratch (for initialization and debugging)
   Key compute_key() const;
@@ -560,6 +566,14 @@ inline Bitboard Position::checkers() const {
   return st->checkersBB;
 }
 
+inline Bitboard Position::pinned_pieces(Color c) const {
+  return hidden_checkers<true>(c);
+}
+
+inline Bitboard Position::discovered_check_candidates(Color c) const {
+  return hidden_checkers<false>(c);
+}
+
 inline bool Position::is_check() const {
   return st->checkersBB != EmptyBoardBB;
 }