From 769f2fdecb2ff2ba01f9cff6bee12926866510ed Mon Sep 17 00:00:00 2001 From: Marco Costalba Date: Tue, 10 Feb 2009 17:44:55 +0100 Subject: [PATCH] Remove special case of pawn checks generation Also additional renaming. No functional change. Signed-off-by: Marco Costalba --- src/movegen.cpp | 78 ++++++++++++++++++++++--------------------------- 1 file changed, 35 insertions(+), 43 deletions(-) diff --git a/src/movegen.cpp b/src/movegen.cpp index f22df724..9bc149d5 100644 --- a/src/movegen.cpp +++ b/src/movegen.cpp @@ -46,40 +46,40 @@ namespace { // Function 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 -- 2.39.2