From 542a2b39ed811a3795cdce2416896ffaf2a485cf Mon Sep 17 00:00:00 2001 From: mstembera Date: Sun, 14 Oct 2018 12:50:31 -0700 Subject: [PATCH] Small simplification in castling rights There is no need for a special struct with a static member to generate castling rights. No functional change. --- src/movegen.cpp | 21 +++++++++++---------- src/pawns.cpp | 4 ++-- src/types.h | 6 ------ 3 files changed, 13 insertions(+), 18 deletions(-) diff --git a/src/movegen.cpp b/src/movegen.cpp index 35ca6e77..4532fba5 100644 --- a/src/movegen.cpp +++ b/src/movegen.cpp @@ -25,9 +25,10 @@ namespace { - template - ExtMove* generate_castling(const Position& pos, ExtMove* moveList, Color us) { + template + ExtMove* generate_castling(const Position& pos, ExtMove* moveList) { + constexpr CastlingRight Cr = Us | Cs; constexpr bool KingSide = (Cr == WHITE_OO || Cr == BLACK_OO); if (pos.castling_impeded(Cr) || !pos.can_castle(Cr)) @@ -35,10 +36,10 @@ namespace { // After castling, the rook and king final positions are the same in Chess960 // as they would be in standard chess. - Square kfrom = pos.square(us); + Square kfrom = pos.square(Us); Square rfrom = pos.castling_rook_square(Cr); - Square kto = relative_square(us, KingSide ? SQ_G1 : SQ_C1); - Bitboard enemies = pos.pieces(~us); + Square kto = relative_square(Us, KingSide ? SQ_G1 : SQ_C1); + Bitboard enemies = pos.pieces(~Us); assert(!pos.checkers()); @@ -52,7 +53,7 @@ namespace { // Because we generate only legal castling moves we need to verify that // when moving the castling rook we do not discover some hidden checker. // For instance an enemy queen in SQ_A1 when castling rook is in SQ_B1. - if (Chess960 && (attacks_bb(kto, pos.pieces() ^ rfrom) & pos.pieces(~us, ROOK, QUEEN))) + if (Chess960 && (attacks_bb(kto, pos.pieces() ^ rfrom) & pos.pieces(~Us, ROOK, QUEEN))) return moveList; Move m = make(kfrom, rfrom); @@ -281,13 +282,13 @@ namespace { { if (pos.is_chess960()) { - moveList = generate_castling::right, Checks, true>(pos, moveList, Us); - moveList = generate_castling::right, Checks, true>(pos, moveList, Us); + moveList = generate_castling(pos, moveList); + moveList = generate_castling(pos, moveList); } else { - moveList = generate_castling::right, Checks, false>(pos, moveList, Us); - moveList = generate_castling::right, Checks, false>(pos, moveList, Us); + moveList = generate_castling(pos, moveList); + moveList = generate_castling(pos, moveList); } } diff --git a/src/pawns.cpp b/src/pawns.cpp index 75b94c19..36b10f32 100644 --- a/src/pawns.cpp +++ b/src/pawns.cpp @@ -250,10 +250,10 @@ Score Entry::do_king_safety(const Position& pos, Square ksq) { Value bonus = evaluate_shelter(pos, ksq); // If we can castle use the bonus after the castling if it is bigger - if (pos.can_castle(MakeCastling::right)) + if (pos.can_castle(Us | KING_SIDE)) bonus = std::max(bonus, evaluate_shelter(pos, relative_square(Us, SQ_G1))); - if (pos.can_castle(MakeCastling::right)) + if (pos.can_castle(Us | QUEEN_SIDE)) bonus = std::max(bonus, evaluate_shelter(pos, relative_square(Us, SQ_C1))); return make_score(bonus, -16 * minKingPawnDistance); diff --git a/src/types.h b/src/types.h index c9c988ba..9e0f8c3e 100644 --- a/src/types.h +++ b/src/types.h @@ -145,12 +145,6 @@ enum CastlingRight { CASTLING_RIGHT_NB = 16 }; -template struct MakeCastling { - static constexpr CastlingRight - right = C == WHITE ? S == QUEEN_SIDE ? WHITE_OOO : WHITE_OO - : S == QUEEN_SIDE ? BLACK_OOO : BLACK_OO; -}; - enum Phase { PHASE_ENDGAME, PHASE_MIDGAME = 128, -- 2.39.2