From 12f4bbc8f2b6122d9dc0949f3483e7dd3f26a829 Mon Sep 17 00:00:00 2001 From: Marco Costalba Date: Wed, 5 Jan 2011 19:00:30 +0100 Subject: [PATCH 1/1] Templetize move generation API No functional change. Signed-off-by: Marco Costalba --- src/movegen.cpp | 24 ++++++++++++------------ src/movegen.h | 22 ++++++++++------------ src/movepick.cpp | 10 +++++----- src/position.cpp | 4 ++-- 4 files changed, 29 insertions(+), 31 deletions(-) diff --git a/src/movegen.cpp b/src/movegen.cpp index 8f0a825f..349d3b71 100644 --- a/src/movegen.cpp +++ b/src/movegen.cpp @@ -161,8 +161,8 @@ namespace { /// generate_captures() generates all pseudo-legal captures and queen /// promotions. Returns a pointer to the end of the move list. - -MoveStack* generate_captures(const Position& pos, MoveStack* mlist) { +template<> +MoveStack* generate(const Position& pos, MoveStack* mlist) { assert(pos.is_ok()); assert(!pos.is_check()); @@ -181,8 +181,8 @@ MoveStack* generate_captures(const Position& pos, MoveStack* mlist) { /// generate_noncaptures() generates all pseudo-legal non-captures and /// underpromotions. Returns a pointer to the end of the move list. - -MoveStack* generate_noncaptures(const Position& pos, MoveStack* mlist) { +template<> +MoveStack* generate(const Position& pos, MoveStack* mlist) { assert(pos.is_ok()); assert(!pos.is_check()); @@ -203,8 +203,8 @@ MoveStack* generate_noncaptures(const Position& pos, MoveStack* mlist) { /// generate_non_evasions() generates all pseudo-legal captures and /// non-captures. Returns a pointer to the end of the move list. - -MoveStack* generate_non_evasions(const Position& pos, MoveStack* mlist) { +template<> +MoveStack* generate(const Position& pos, MoveStack* mlist) { assert(pos.is_ok()); assert(!pos.is_check()); @@ -229,8 +229,8 @@ MoveStack* generate_non_evasions(const Position& pos, MoveStack* mlist) { /// generate_non_capture_checks() generates all pseudo-legal non-captures and knight /// underpromotions that give check. Returns a pointer to the end of the move list. - -MoveStack* generate_non_capture_checks(const Position& pos, MoveStack* mlist) { +template<> +MoveStack* generate(const Position& pos, MoveStack* mlist) { assert(pos.is_ok()); assert(!pos.is_check()); @@ -270,8 +270,8 @@ MoveStack* generate_non_capture_checks(const Position& pos, MoveStack* mlist) { /// generate_evasions() generates all pseudo-legal check evasions when /// the side to move is in check. Returns a pointer to the end of the move list. - -MoveStack* generate_evasions(const Position& pos, MoveStack* mlist) { +template<> +MoveStack* generate(const Position& pos, MoveStack* mlist) { assert(pos.is_ok()); assert(pos.is_check()); @@ -347,8 +347,8 @@ MoveStack* generate_moves(const Position& pos, MoveStack* mlist, bool pseudoLega Bitboard pinned = pos.pinned_pieces(pos.side_to_move()); // Generate pseudo-legal moves - last = pos.is_check() ? generate_evasions(pos, mlist) - : generate_non_evasions(pos, mlist); + last = pos.is_check() ? generate(pos, mlist) + : generate(pos, mlist); if (pseudoLegal) return last; diff --git a/src/movegen.h b/src/movegen.h index 723ab8ba..636e439d 100644 --- a/src/movegen.h +++ b/src/movegen.h @@ -21,22 +21,20 @@ #if !defined(MOVEGEN_H_INCLUDED) #define MOVEGEN_H_INCLUDED -//// -//// Includes -//// - #include "position.h" +enum MoveGeneration { + CAPTURES, + NON_CAPTURES, + NON_CAPTURE_CHECKS, + EVASIONS, + NON_EVASIONS, + ALL_MOVES +}; -//// -//// Prototypes -//// +template +MoveStack* generate(const Position& pos, MoveStack* mlist); -extern MoveStack* generate_captures(const Position& pos, MoveStack* mlist); -extern MoveStack* generate_noncaptures(const Position& pos, MoveStack* mlist); -extern MoveStack* generate_non_capture_checks(const Position& pos, MoveStack* mlist); -extern MoveStack* generate_evasions(const Position& pos, MoveStack* mlist); -extern MoveStack* generate_non_evasions(const Position& pos, MoveStack* mlist); extern MoveStack* generate_moves(const Position& pos, MoveStack* mlist, bool pseudoLegal = false); extern bool move_is_legal(const Position& pos, const Move m, Bitboard pinned); extern bool move_is_legal(const Position& pos, const Move m); diff --git a/src/movepick.cpp b/src/movepick.cpp index dd474370..e4e45d41 100644 --- a/src/movepick.cpp +++ b/src/movepick.cpp @@ -132,7 +132,7 @@ void MovePicker::go_next_phase() { return; case PH_GOOD_CAPTURES: - lastMove = generate_captures(pos, moves); + lastMove = generate(pos, moves); score_captures(); return; @@ -142,7 +142,7 @@ void MovePicker::go_next_phase() { return; case PH_NONCAPTURES: - lastMove = generate_noncaptures(pos, moves); + lastMove = generate(pos, moves); score_noncaptures(); sort_moves(moves, lastMove, &lastGoodNonCapture); return; @@ -156,17 +156,17 @@ void MovePicker::go_next_phase() { case PH_EVASIONS: assert(pos.is_check()); - lastMove = generate_evasions(pos, moves); + lastMove = generate(pos, moves); score_evasions(); return; case PH_QCAPTURES: - lastMove = generate_captures(pos, moves); + lastMove = generate(pos, moves); score_captures(); return; case PH_QCHECKS: - lastMove = generate_non_capture_checks(pos, moves); + lastMove = generate(pos, moves); return; case PH_STOP: diff --git a/src/position.cpp b/src/position.cpp index aac03eb2..44a1a404 100644 --- a/src/position.cpp +++ b/src/position.cpp @@ -1730,8 +1730,8 @@ bool Position::has_mate_threat() { do_null_move(st1); // Then generate pseudo-legal moves that could give check - last = generate_non_capture_checks(*this, mlist); - last = generate_captures(*this, last); + last = generate(*this, mlist); + last = generate(*this, last); // Loop through the moves, and see if one of them gives mate Bitboard pinned = pinned_pieces(sideToMove); -- 2.39.2