Merge official-stockfish/master
authorFabian Fichter <ianfab@users.noreply.github.com>
Fri, 7 Aug 2020 16:01:07 +0000 (18:01 +0200)
committerFabian Fichter <ianfab@users.noreply.github.com>
Fri, 7 Aug 2020 16:01:07 +0000 (18:01 +0200)
No functional change.

1  2 
src/position.h

diff --cc src/position.h
@@@ -90,93 -78,12 +90,92 @@@ public
    Position& operator=(const Position&) = delete;
  
    // FEN string input/output
 -  Position& set(const std::string& fenStr, bool isChess960, StateInfo* si, Thread* th);
 +  Position& set(const Variant* v, const std::string& fenStr, bool isChess960, StateInfo* si, Thread* th, bool sfen = false);
    Position& set(const std::string& code, Color c, StateInfo* si);
 -  const std::string fen() const;
 +  const std::string fen(bool sfen = false, bool showPromoted = false, int countStarted = 0, std::string holdings = "-") const;
 +
 +  // Variant rule properties
 +  const Variant* variant() const;
 +  Rank max_rank() const;
 +  File max_file() const;
 +  bool two_boards() const;
 +  Bitboard board_bb() const;
 +  Bitboard board_bb(Color c, PieceType pt) const;
 +  const std::set<PieceType>& piece_types() const;
 +  const std::string& piece_to_char() const;
 +  const std::string& piece_to_char_synonyms() const;
 +  Rank promotion_rank() const;
 +  const std::set<PieceType, std::greater<PieceType> >& promotion_piece_types() const;
 +  bool sittuyin_promotion() const;
 +  int promotion_limit(PieceType pt) const;
 +  PieceType promoted_piece_type(PieceType pt) const;
 +  bool piece_promotion_on_capture() const;
 +  bool mandatory_pawn_promotion() const;
 +  bool mandatory_piece_promotion() const;
 +  bool piece_demotion() const;
 +  bool endgame_eval() const;
 +  bool double_step_enabled() const;
 +  Rank double_step_rank() const;
 +  bool first_rank_double_steps() const;
 +  bool castling_enabled() const;
 +  bool castling_dropped_piece() const;
 +  File castling_kingside_file() const;
 +  File castling_queenside_file() const;
 +  Rank castling_rank(Color c) const;
 +  PieceType castling_rook_piece() const;
 +  PieceType king_type() const;
 +  bool checking_permitted() const;
 +  bool drop_checks() const;
 +  bool must_capture() const;
 +  bool must_drop() const;
 +  bool piece_drops() const;
 +  bool drop_loop() const;
 +  bool captures_to_hand() const;
 +  bool first_rank_pawn_drops() const;
 +  bool drop_on_top() const;
 +  EnclosingRule enclosing_drop() const;
 +  Bitboard drop_region(Color c) const;
 +  Bitboard drop_region(Color c, PieceType pt) const;
 +  bool sittuyin_rook_drop() const;
 +  bool drop_opposite_colored_bishop() const;
 +  bool drop_promoted() const;
 +  bool shogi_doubled_pawn() const;
 +  bool immobility_illegal() const;
 +  bool gating() const;
 +  bool seirawan_gating() const;
 +  bool cambodian_moves() const;
 +  Bitboard diagonal_lines() const;
 +  bool pass() const;
 +  bool pass_on_stalemate() const;
 +  Bitboard promoted_soldiers(Color c) const;
 +  bool makpong() const;
 +  EnclosingRule flip_enclosed_pieces() const;
 +  // winning conditions
 +  int n_move_rule() const;
 +  int n_fold_rule() const;
 +  Value stalemate_value(int ply = 0) const;
 +  Value checkmate_value(int ply = 0) const;
 +  Value extinction_value(int ply = 0) const;
 +  bool extinction_claim() const;
 +  const std::set<PieceType>& extinction_piece_types() const;
 +  int extinction_piece_count() const;
 +  int extinction_opponent_piece_count() const;
 +  PieceType capture_the_flag_piece() const;
 +  Bitboard capture_the_flag(Color c) const;
 +  bool flag_move() const;
 +  bool check_counting() const;
 +  int connect_n() const;
 +  CheckCount checks_remaining(Color c) const;
 +  MaterialCounting material_counting() const;
 +  CountingRule counting_rule() const;
 +
 +  // Variant-specific properties
 +  int count_in_hand(Color c, PieceType pt) const;
 +  int count_with_hand(Color c, PieceType pt) const;
 +  bool bikjang() const;
  
    // Position representation
-   Bitboard pieces() const;
--  Bitboard pieces(PieceType pt) const;
++  Bitboard pieces(PieceType pt = ALL_PIECES) const;
    Bitboard pieces(PieceType pt1, PieceType pt2) const;
    Bitboard pieces(Color c) const;
    Bitboard pieces(Color c, PieceType pt) const;
@@@ -799,21 -211,15 +795,21 @@@ inline Piece Position::piece_on(Square 
    return board[s];
  }
  
+ inline bool Position::empty(Square s) const {
+   return piece_on(s) == NO_PIECE;
+ }
 +inline Piece Position::unpromoted_piece_on(Square s) const {
 +  return unpromotedBoard[s];
 +}
 +
  inline Piece Position::moved_piece(Move m) const {
 +  if (type_of(m) == DROP)
 +      return make_piece(sideToMove, dropped_piece_type(m));
-   return board[from_sq(m)];
- }
- inline Bitboard Position::pieces() const {
-   return byTypeBB[ALL_PIECES];
+   return piece_on(from_sq(m));
  }
  
 -inline Bitboard Position::pieces(PieceType pt = ALL_PIECES) const {
 +inline Bitboard Position::pieces(PieceType pt) const {
    return byTypeBB[pt];
  }
  
@@@ -830,17 -236,9 +826,17 @@@ inline Bitboard Position::pieces(Color 
  }
  
  inline Bitboard Position::pieces(Color c, PieceType pt1, PieceType pt2) const {
-   return byColorBB[c] & (byTypeBB[pt1] | byTypeBB[pt2]);
+   return pieces(c) & (pieces(pt1) | pieces(pt2));
  }
  
 +inline Bitboard Position::major_pieces(Color c) const {
-   return byColorBB[c] & (byTypeBB[QUEEN] | byTypeBB[AIWOK] | byTypeBB[ARCHBISHOP] | byTypeBB[CHANCELLOR] | byTypeBB[AMAZON]);
++  return pieces(c) & (pieces(QUEEN) | pieces(AIWOK) | pieces(ARCHBISHOP) | pieces(CHANCELLOR) | pieces(AMAZON));
 +}
 +
 +inline int Position::count(Color c, PieceType pt) const {
 +  return pieceCount[make_piece(c, pt)];
 +}
 +
  template<PieceType Pt> inline int Position::count(Color c) const {
    return pieceCount[make_piece(c, Pt)];
  }
@@@ -853,13 -251,9 +849,13 @@@ template<PieceType Pt> inline const Squ
    return pieceList[make_piece(c, Pt)];
  }
  
 +inline const Square* Position::squares(Color c, PieceType pt) const {
 +  return pieceList[make_piece(c, pt)];
 +}
 +
  template<PieceType Pt> inline Square Position::square(Color c) const {
    assert(pieceCount[make_piece(c, Pt)] == 1);
-   return pieceList[make_piece(c, Pt)][0];
+   return squares<Pt>(c)[0];
  }
  
  inline Square Position::ep_square() const {
@@@ -957,17 -303,9 +953,17 @@@ inline Bitboard Position::moves_from(Co
  }
  
  inline Bitboard Position::attackers_to(Square s) const {
-   return attackers_to(s, byTypeBB[ALL_PIECES]);
+   return attackers_to(s, pieces());
  }
  
 +inline Bitboard Position::attackers_to(Square s, Color c) const {
 +  return attackers_to(s, byTypeBB[ALL_PIECES], c);
 +}
 +
 +inline Bitboard Position::attackers_to(Square s, Bitboard occupied, Color c) const {
 +  return attackers_to(s, occupied, c, byTypeBB[JANGGI_CANNON]);
 +}
 +
  inline Bitboard Position::checkers() const {
    return st->checkersBB;
  }