From: Fabian Fichter Date: Fri, 7 Aug 2020 16:01:07 +0000 (+0200) Subject: Merge official-stockfish/master X-Git-Url: http://winboard.nl/cgi-bin?a=commitdiff_plain;h=96f9e3bb0ce651f8cb5ccf2d0b692c1084dd6d7b;p=fairystockfish.git Merge official-stockfish/master No functional change. --- 96f9e3bb0ce651f8cb5ccf2d0b692c1084dd6d7b diff --cc src/position.h index ad6b854,f79c546..2238ee1 --- a/src/position.h +++ b/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& 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 >& 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& 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 inline int Position::count(Color c) const { return pieceCount[make_piece(c, Pt)]; } @@@ -853,13 -251,9 +849,13 @@@ template 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 inline Square Position::square(Color c) const { assert(pieceCount[make_piece(c, Pt)] == 1); - return pieceList[make_piece(c, Pt)][0]; + return squares(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; }