From 9bffe811c44b88ba3b5dd0904539c8ca14257a35 Mon Sep 17 00:00:00 2001 From: Marco Costalba Date: Tue, 10 Feb 2009 17:31:07 +0100 Subject: [PATCH] Remove special case of pawn move generatation Code cleanup. No functional change. Signed-off-by: Marco Costalba --- src/movegen.cpp | 55 +++++++++++++++++++++---------------------------- 1 file changed, 23 insertions(+), 32 deletions(-) diff --git a/src/movegen.cpp b/src/movegen.cpp index 129738a9..f22df724 100644 --- a/src/movegen.cpp +++ b/src/movegen.cpp @@ -40,44 +40,30 @@ namespace { QUEEN_SIDE }; + static const bool CAPTURE = true; + static const bool NON_CAPTURE = false; + // Function bool castling_is_check(const Position&, CastlingSide); - // Templates + // Main templates template MoveStack* generate_castle_moves(const Position&, MoveStack*); + template MoveStack* generate_piece_checks(const Position&, MoveStack*, Color us, Bitboard, Square); + + // Helper templates template MoveStack* do_generate_pawn_blocking_evasions(const Position& pos, Bitboard not_pinned, Bitboard blockSquares, MoveStack* mlist); - // Template generate_pawn_captures() with specializations template MoveStack* do_generate_pawn_captures(const Position& pos, MoveStack* mlist); - template - inline MoveStack* generate_pawn_captures(const Position& p, MoveStack* m) { - return do_generate_pawn_captures(p, m); - } - template<> - inline MoveStack* generate_pawn_captures(const Position& p, MoveStack* m) { - return do_generate_pawn_captures(p, m); - } - - // Template generate_pawn_noncaptures() with specializations template MoveStack* do_generate_pawn_noncaptures(const Position& pos, MoveStack* mlist); - template - inline MoveStack* generate_pawn_noncaptures(const Position& p, MoveStack* m) { - return do_generate_pawn_noncaptures(p, m); - } - template<> - inline MoveStack* generate_pawn_noncaptures(const Position& p, MoveStack* m) { - return do_generate_pawn_noncaptures(p, m); - } - // Template generate_pawn_checks() with specializations template MoveStack* do_generate_pawn_checks(const Position&, Bitboard, Square, MoveStack*); @@ -97,9 +83,23 @@ namespace { template<> MoveStack* generate_piece_moves(const Position& pos, MoveStack* mlist, Color us, Bitboard target); + template + inline MoveStack* generate_piece_moves(const Position& p, MoveStack* m, Color us) { + + assert(Piece == PAWN); + + if (Capture) + return (us == WHITE ? do_generate_pawn_captures(p, m) + : do_generate_pawn_captures(p, m)); + else + return (us == WHITE ? do_generate_pawn_noncaptures(p, m) + : do_generate_pawn_noncaptures(p, m)); + } + // Template generate_piece_blocking_evasions() with specializations template 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); } @@ -126,12 +126,7 @@ int generate_captures(const Position& pos, MoveStack* mlist) { mlist = generate_piece_moves(pos, mlist, us, target); mlist = generate_piece_moves(pos, mlist, us, target); mlist = generate_piece_moves(pos, mlist, us, target); - - if (us == WHITE) - mlist = generate_pawn_captures(pos, mlist); - else - mlist = generate_pawn_captures(pos, mlist); - + mlist = generate_piece_moves(pos, mlist, us); mlist = generate_piece_moves(pos, mlist, us, target); return int(mlist - mlist_start); } @@ -149,11 +144,7 @@ int generate_noncaptures(const Position& pos, MoveStack* mlist) { Bitboard target = pos.empty_squares(); MoveStack* mlist_start = mlist; - if (us == WHITE) - mlist = generate_pawn_noncaptures(pos, mlist); - else - mlist = generate_pawn_noncaptures(pos, mlist); - + mlist = generate_piece_moves(pos, mlist, us); mlist = generate_piece_moves(pos, mlist, us, target); mlist = generate_piece_moves(pos, mlist, us, target); mlist = generate_piece_moves(pos, mlist, us, target); -- 2.39.2