]> git.sesse.net Git - stockfish/blobdiff - src/position.h
Retire square_is_weak()
[stockfish] / src / position.h
index d72502da391d2e7c6235473b88a6ea428c594a34..79406d5277dc6782e42434af955f2f34c54f18e5 100644 (file)
@@ -47,7 +47,7 @@ struct CheckInfo {
 
 /// Castle rights, encoded as bit fields
 
-enum CastleRights {
+enum CastleRight {
   CASTLES_NONE = 0,
   WHITE_OO     = 1,
   BLACK_OO     = 2,
@@ -129,9 +129,7 @@ public:
 
   // The piece on a given square
   Piece piece_on(Square s) const;
-  Color color_of_piece_on(Square s) const;
   bool square_is_empty(Square s) const;
-  bool square_is_occupied(Square s) const;
 
   // Side to move
   Color side_to_move() const;
@@ -139,7 +137,7 @@ public:
   // Bitboard representation of the position
   Bitboard empty_squares() const;
   Bitboard occupied_squares() const;
-  Bitboard pieces_of_color(Color c) const;
+  Bitboard pieces(Color c) const;
   Bitboard pieces(PieceType pt) const;
   Bitboard pieces(PieceType pt, Color c) const;
   Bitboard pieces(PieceType pt1, PieceType pt2) const;
@@ -155,11 +153,9 @@ public:
   Square king_square(Color c) const;
 
   // Castling rights
-  bool can_castle_kingside(Color c) const;
-  bool can_castle_queenside(Color c) const;
+  bool can_castle(CastleRight f) const;
   bool can_castle(Color c) const;
-  Square initial_kr_square(Color c) const;
-  Square initial_qr_square(Color c) const;
+  Square castle_rook_square(CastleRight f) const;
 
   // Bitboards for pinned pieces and discovered check candidates
   Bitboard discovered_check_candidates(Color c) const;
@@ -170,8 +166,7 @@ public:
   bool in_check() const;
 
   // Piece lists
-  Square piece_list(Color c, PieceType pt, int index) const;
-  const Square* piece_list_begin(Color c, PieceType pt) const;
+  const Square* piece_list(Color c, PieceType pt) const;
 
   // Information about attacks to or from a given square
   Bitboard attackers_to(Square s) const;
@@ -196,9 +191,6 @@ public:
   // Information about pawns
   bool pawn_is_passed(Color c, Square s) const;
 
-  // Weak squares
-  bool square_is_weak(Square s, Color c) const;
-
   // Doing and undoing moves
   void do_setup_move(Move m);
   void do_move(Move m, StateInfo& st);
@@ -220,14 +212,14 @@ public:
   // Incremental evaluation
   Score value() const;
   Value non_pawn_material(Color c) const;
-  static Score pst_delta(Piece piece, Square from, Square to);
+  Score pst_delta(Piece piece, Square from, Square to) const;
 
   // Game termination checks
   bool is_mate() const;
   template<bool SkipRepetition> bool is_draw() const;
 
   // Number of plies from starting position
-  int startpos_ply_counter() const;
+  int full_moves() const;
 
   // Other properties of the position
   bool opposite_colored_bishops() const;
@@ -252,9 +244,8 @@ private:
   void clear();
   void detach();
   void put_piece(Piece p, Square s);
-  void set_castle_kingside(Color c);
-  void set_castle_queenside(Color c);
-  bool set_castling_rights(char token);
+  void set_castle(int f, Square ksq, Square rsq);
+  void set_castling_rights(char token);
   bool move_is_pl_slow(const Move m) const;
 
   // Helper functions for doing and undoing moves
@@ -272,7 +263,7 @@ private:
   Key compute_material_key() const;
 
   // Computing incremental evaluation scores and material counts
-  static Score pst(Color c, PieceType pt, Square s);
+  Score pst(Piece p, Square s) const;
   Score compute_value() const;
   Value compute_non_pawn_material(Color c) const;
 
@@ -293,10 +284,10 @@ private:
   Color sideToMove;
   Key history[MaxGameLength];
   int castleRightsMask[64];
+  Square castleRookSquare[16]; // [CastleRights]
   StateInfo startState;
-  File initialKFile, initialKRFile, initialQRFile;
   bool chess960;
-  int startPosPlyCounter;
+  int fullMoves;
   int threadID;
   int64_t nodes;
   StateInfo* st;
@@ -322,18 +313,10 @@ inline Piece Position::piece_on(Square s) const {
   return board[s];
 }
 
-inline Color Position::color_of_piece_on(Square s) const {
-  return color_of_piece(piece_on(s));
-}
-
 inline bool Position::square_is_empty(Square s) const {
   return piece_on(s) == PIECE_NONE;
 }
 
-inline bool Position::square_is_occupied(Square s) const {
-  return !square_is_empty(s);
-}
-
 inline Color Position::side_to_move() const {
   return sideToMove;
 }
@@ -346,7 +329,7 @@ inline Bitboard Position::empty_squares() const {
   return ~occupied_squares();
 }
 
-inline Bitboard Position::pieces_of_color(Color c) const {
+inline Bitboard Position::pieces(Color c) const {
   return byColorBB[c];
 }
 
@@ -370,11 +353,7 @@ inline int Position::piece_count(Color c, PieceType pt) const {
   return pieceCount[c][pt];
 }
 
-inline Square Position::piece_list(Color c, PieceType pt, int idx) const {
-  return pieceList[c][pt][idx];
-}
-
-inline const Square* Position::piece_list_begin(Color c, PieceType pt) const {
+inline const Square* Position::piece_list(Color c, PieceType pt) const {
   return pieceList[c][pt];
 }
 
@@ -386,32 +365,16 @@ inline Square Position::king_square(Color c) const {
   return pieceList[c][KING][0];
 }
 
-inline bool Position::can_castle_kingside(Color c) const {
-  return st->castleRights & (WHITE_OO << c);
-}
-
-inline bool Position::can_castle_queenside(Color c) const {
-  return st->castleRights & (WHITE_OOO << c);
+inline bool Position::can_castle(CastleRight f) const {
+  return st->castleRights & f;
 }
 
 inline bool Position::can_castle(Color c) const {
   return st->castleRights & ((WHITE_OO | WHITE_OOO) << c);
 }
 
-inline void Position::set_castle_kingside(Color c) {
-  st->castleRights |= (WHITE_OO << c);
-}
-
-inline void Position::set_castle_queenside(Color c) {
-  st->castleRights |= (WHITE_OOO << c);
-}
-
-inline Square Position::initial_kr_square(Color c) const {
-  return relative_square(c, make_square(initialKRFile, RANK_1));
-}
-
-inline Square Position::initial_qr_square(Color c) const {
-  return relative_square(c, make_square(initialQRFile, RANK_1));
+inline Square Position::castle_rook_square(CastleRight f) const {
+  return castleRookSquare[f];
 }
 
 template<>
@@ -451,10 +414,6 @@ inline bool Position::pawn_is_passed(Color c, Square s) const {
   return !(pieces(PAWN, opposite_color(c)) & passed_pawn_mask(c, s));
 }
 
-inline bool Position::square_is_weak(Square s, Color c) const {
-  return !(pieces(PAWN, opposite_color(c)) & attack_span_mask(c, s));
-}
-
 inline Key Position::get_key() const {
   return st->key;
 }
@@ -471,11 +430,11 @@ inline Key Position::get_material_key() const {
   return st->materialKey;
 }
 
-inline Score Position::pst(Color c, PieceType pt, Square s) {
-  return PieceSquareTable[make_piece(c, pt)][s];
+inline Score Position::pst(Piece p, Square s) const {
+  return PieceSquareTable[p][s];
 }
 
-inline Score Position::pst_delta(Piece piece, Square from, Square to) {
+inline Score Position::pst_delta(Piece piece, Square from, Square to) const {
   return PieceSquareTable[piece][to] - PieceSquareTable[piece][from];
 }
 
@@ -494,14 +453,15 @@ inline bool Position::move_is_passed_pawn_push(Move m) const {
         && pawn_is_passed(c, move_to(m));
 }
 
-inline int Position::startpos_ply_counter() const {
-  return startPosPlyCounter;
+inline int Position::full_moves() const {
+  return fullMoves;
 }
 
 inline bool Position::opposite_colored_bishops() const {
 
-  return   piece_count(WHITE, BISHOP) == 1 && piece_count(BLACK, BISHOP) == 1
-        && opposite_color_squares(piece_list(WHITE, BISHOP, 0), piece_list(BLACK, BISHOP, 0));
+  return   piece_count(WHITE, BISHOP) == 1
+        && piece_count(BLACK, BISHOP) == 1
+        && opposite_color_squares(piece_list(WHITE, BISHOP)[0], piece_list(BLACK, BISHOP)[0]);
 }
 
 inline bool Position::has_pawn_on_7th(Color c) const {