X-Git-Url: https://git.sesse.net/?p=stockfish;a=blobdiff_plain;f=src%2Fmovegen.cpp;h=12260e3b9dd99fd3b67bddce75dc9498bcd81499;hp=f22df724952a81d82cac66616c6921641b560d5e;hb=9d044cf4ee933257c65cbd8c01589dd88778a1dd;hpb=9bffe811c44b88ba3b5dd0904539c8ca14257a35 diff --git a/src/movegen.cpp b/src/movegen.cpp index f22df724..12260e3b 100644 --- a/src/movegen.cpp +++ b/src/movegen.cpp @@ -40,46 +40,46 @@ namespace { QUEEN_SIDE }; - static const bool CAPTURE = true; - static const bool NON_CAPTURE = false; + const bool CAPTURE = true; + const bool NON_CAPTURE = false; - // Function + // Functions bool castling_is_check(const Position&, CastlingSide); - // Main templates + // Helper templates template - MoveStack* generate_castle_moves(const Position&, MoveStack*); - - template - MoveStack* generate_piece_checks(const Position&, MoveStack*, Color us, Bitboard, Square); + MoveStack* generate_castle_moves(const Position& pos, MoveStack* mlist); - // Helper templates template - MoveStack* do_generate_pawn_blocking_evasions(const Position& pos, Bitboard not_pinned, - Bitboard blockSquares, MoveStack* mlist); + MoveStack* generate_pawn_blocking_evasions(const Position&, Bitboard, Bitboard, MoveStack*); template - MoveStack* do_generate_pawn_captures(const Position& pos, MoveStack* mlist); + MoveStack* generate_pawn_captures(const Position& pos, MoveStack* mlist); template - MoveStack* do_generate_pawn_noncaptures(const Position& pos, MoveStack* mlist); + MoveStack* generate_pawn_noncaptures(const Position& pos, MoveStack* mlist); - // Template generate_pawn_checks() with specializations template - MoveStack* do_generate_pawn_checks(const Position&, Bitboard, Square, MoveStack*); + MoveStack* generate_pawn_checks(const Position&, Bitboard, Square, MoveStack*); + + // Template generate_piece_checks() with specializations + template + MoveStack* generate_piece_checks(const Position&, MoveStack*, Color, Bitboard, Square); - template - inline MoveStack* generate_pawn_checks(const Position& p, MoveStack* m, Bitboard dc, Square ksq) { - return do_generate_pawn_checks(p, dc, ksq, m); - } template<> - inline MoveStack* generate_pawn_checks(const Position& p, MoveStack* m, Bitboard dc, Square ksq) { - return do_generate_pawn_checks(p, dc, ksq, m); + inline MoveStack* generate_piece_checks(const Position& p, MoveStack* m, Color us, Bitboard dc, Square ksq) { + + if (us == WHITE) + return generate_pawn_checks(p, dc, ksq, m); + else + return generate_pawn_checks(p, dc, ksq, m); + } // Template generate_piece_moves() with specializations template MoveStack* generate_piece_moves(const Position&, MoveStack*, Color us, Bitboard); + template<> MoveStack* generate_piece_moves(const Position& pos, MoveStack* mlist, Color us, Bitboard target); @@ -89,11 +89,11 @@ namespace { assert(Piece == PAWN); if (Capture) - return (us == WHITE ? do_generate_pawn_captures(p, m) - : do_generate_pawn_captures(p, m)); + return (us == WHITE ? generate_pawn_captures(p, m) + : generate_pawn_captures(p, m)); else - return (us == WHITE ? do_generate_pawn_noncaptures(p, m) - : do_generate_pawn_noncaptures(p, m)); + return (us == WHITE ? generate_pawn_noncaptures(p, m) + : generate_pawn_noncaptures(p, m)); } // Template generate_piece_blocking_evasions() with specializations @@ -101,7 +101,13 @@ namespace { MoveStack* generate_piece_blocking_evasions(const Position&, MoveStack*, Color us, Bitboard, Bitboard); template<> - MoveStack* generate_piece_blocking_evasions(const Position& p, MoveStack* m, Color us, Bitboard np, Bitboard bs); + inline MoveStack* generate_piece_blocking_evasions(const Position& p, MoveStack* m, Color us, + Bitboard np, Bitboard bs) { + if (us == WHITE) + return generate_pawn_blocking_evasions(p, np, bs, m); + else + return generate_pawn_blocking_evasions(p, np, bs, m); + } } @@ -170,13 +176,8 @@ int generate_checks(const Position& pos, MoveStack* mlist, Bitboard dc) { assert(pos.piece_on(ksq) == king_of_color(opposite_color(us))); - // Pawn moves - if (us == WHITE) - mlist = generate_pawn_checks(pos, mlist, dc, ksq); - else - mlist = generate_pawn_checks(pos, mlist, dc, ksq); - // Pieces moves + mlist = generate_piece_checks(pos, mlist, us, dc, ksq); mlist = generate_piece_checks(pos, mlist, us, dc, ksq); mlist = generate_piece_checks(pos, mlist, us, dc, ksq); mlist = generate_piece_checks(pos, mlist, us, dc, ksq); @@ -600,19 +601,10 @@ namespace { return mlist; } - template<> - MoveStack* generate_piece_blocking_evasions(const Position& p, MoveStack* m, Color us, - Bitboard np, Bitboard bs) { - if (us == WHITE) - return do_generate_pawn_blocking_evasions(p, np, bs, m); - else - return do_generate_pawn_blocking_evasions(p, np, bs, m); - } - template - MoveStack* do_generate_pawn_captures(const Position& pos, MoveStack* mlist) { + MoveStack* generate_pawn_captures(const Position& pos, MoveStack* mlist) { Square to; Bitboard pawns = pos.pawns(Us); @@ -685,7 +677,7 @@ namespace { template - MoveStack* do_generate_pawn_noncaptures(const Position& pos, MoveStack* mlist) { + MoveStack* generate_pawn_noncaptures(const Position& pos, MoveStack* mlist) { Bitboard pawns = pos.pawns(Us); Bitboard enemyPieces = pos.pieces_of_color(Them); @@ -742,7 +734,7 @@ namespace { template - MoveStack* do_generate_pawn_checks(const Position& pos, Bitboard dc, Square ksq, MoveStack* mlist) + MoveStack* generate_pawn_checks(const Position& pos, Bitboard dc, Square ksq, MoveStack* mlist) { // Find all friendly pawns not on the enemy king's file Bitboard b1, b2, b3; @@ -831,8 +823,8 @@ namespace { } template - MoveStack* do_generate_pawn_blocking_evasions(const Position& pos, Bitboard not_pinned, - Bitboard blockSquares, MoveStack* mlist) { + MoveStack* generate_pawn_blocking_evasions(const Position& pos, Bitboard not_pinned, + Bitboard blockSquares, MoveStack* mlist) { Square to; // Find non-pinned pawns