From cf71efc34bc6528a3a980aa0b9eec27770095eb8 Mon Sep 17 00:00:00 2001 From: Marco Costalba Date: Mon, 31 Aug 2009 14:28:11 +0200 Subject: [PATCH] MovePicker: rename number_of_moves() in number_of_evasions() It is more clear that only in that case the move number is correct, otherwise is only a partial quantity: the number of moves of that phase. In case of PH_EVASIONS instead we have only one phase. No functional change. Signed-off-by: Marco Costalba --- src/movepick.cpp | 28 ++++++++++++++++++++-------- src/movepick.h | 29 ++++++++--------------------- src/position.cpp | 2 +- src/search.cpp | 4 ++-- 4 files changed, 31 insertions(+), 32 deletions(-) diff --git a/src/movepick.cpp b/src/movepick.cpp index dedfee8a..ea435026 100644 --- a/src/movepick.cpp +++ b/src/movepick.cpp @@ -39,11 +39,23 @@ namespace { + enum MovegenPhase { + PH_TT_MOVES, // Transposition table move and mate killer + PH_GOOD_CAPTURES, // Queen promotions and captures with SEE values >= 0 + PH_KILLERS, // Killer moves from the current ply + PH_NONCAPTURES, // Non-captures and underpromotions + PH_BAD_CAPTURES, // Queen promotions and captures with SEE values < 0 + PH_EVASIONS, // Check evasions + PH_QCAPTURES, // Captures in quiescence search + PH_QCHECKS, // Non-capture checks in quiescence search + PH_STOP + }; + CACHE_LINE_ALIGNMENT - const MovegenPhaseT MainSearchPhaseTable[] = { PH_TT_MOVES, PH_GOOD_CAPTURES, PH_KILLERS, PH_NONCAPTURES, PH_BAD_CAPTURES, PH_STOP}; - const MovegenPhaseT EvasionsPhaseTable[] = { PH_EVASIONS, PH_STOP}; - const MovegenPhaseT QsearchWithChecksPhaseTable[] = { PH_TT_MOVES, PH_QCAPTURES, PH_QCHECKS, PH_STOP}; - const MovegenPhaseT QsearchWithoutChecksPhaseTable[] = { PH_TT_MOVES, PH_QCAPTURES, PH_STOP}; + const uint8_t MainSearchPhaseTable[] = { PH_TT_MOVES, PH_GOOD_CAPTURES, PH_KILLERS, PH_NONCAPTURES, PH_BAD_CAPTURES, PH_STOP}; + const uint8_t EvasionsPhaseTable[] = { PH_EVASIONS, PH_STOP}; + const uint8_t QsearchWithChecksPhaseTable[] = { PH_TT_MOVES, PH_QCAPTURES, PH_QCHECKS, PH_STOP}; + const uint8_t QsearchWithoutChecksPhaseTable[] = { PH_TT_MOVES, PH_QCAPTURES, PH_STOP}; } @@ -63,6 +75,9 @@ MovePicker::MovePicker(const Position& p, Move ttm, Depth d, const History& h, SearchStack* ss) : pos(p), H(h) { int searchTT = ttm; ttMoves[0].move = ttm; + finished = false; + lastBadCapture = badCaptures; + if (ss) { ttMoves[1].move = (ss->mateKiller == ttm)? MOVE_NONE : ss->mateKiller; @@ -72,9 +87,6 @@ MovePicker::MovePicker(const Position& p, Move ttm, Depth d, } else ttMoves[1].move = killers[0].move = killers[1].move = MOVE_NONE; - finished = false; - lastBadCapture = badCaptures; - Color us = pos.side_to_move(); dc = p.discovered_check_candidates(us); @@ -243,7 +255,7 @@ void MovePicker::score_evasions() { /// class. It returns a new legal move every time it is called, until there /// are no more moves left. /// It picks the move with the biggest score from a list of generated moves taking -/// care not to return the tt move if that has already been serched previously. +/// care not to return the tt move if has already been searched previously. Move MovePicker::get_next_move() { diff --git a/src/movepick.h b/src/movepick.h index 27adb101..6c736299 100644 --- a/src/movepick.h +++ b/src/movepick.h @@ -37,20 +37,6 @@ struct SearchStack; -enum MovegenPhase { - PH_TT_MOVES, // Transposition table move and mate killer - PH_GOOD_CAPTURES, // Queen promotions and captures with SEE values >= 0 - PH_KILLERS, // Killer moves from the current ply - PH_NONCAPTURES, // Non-captures and underpromotions - PH_BAD_CAPTURES, // Queen promotions and captures with SEE values < 0 - PH_EVASIONS, // Check evasions - PH_QCAPTURES, // Captures in quiescence search - PH_QCHECKS, // Non-capture checks in quiescence search - PH_STOP -}; - -typedef uint8_t MovegenPhaseT; - /// MovePicker is a class which is used to pick one legal move at a time from /// the current position. It is initialized with a Position object and a few /// moves we have reason to believe are good. The most important method is @@ -67,7 +53,7 @@ public: MovePicker(const Position& p, Move ttm, Depth d, const History& h, SearchStack* ss = NULL); Move get_next_move(); Move get_next_move(Lock& lock); - int number_of_moves() const; + int number_of_evasions() const; Bitboard discovered_check_candidates() const; private: @@ -81,7 +67,7 @@ private: MoveStack ttMoves[2], killers[2]; bool finished; int phase; - const MovegenPhaseT* phasePtr; + const uint8_t* phasePtr; MoveStack *curMove, *lastMove, *lastBadCapture; Bitboard dc, pinned; MoveStack moves[256], badCaptures[64]; @@ -92,12 +78,13 @@ private: //// Inline functions //// -/// MovePicker::number_of_moves() simply returns the numOfMoves member -/// variable. It is intended to be used in positions where the side to move -/// is in check, for detecting checkmates or situations where there is only -/// a single reply to check. +/// MovePicker::number_of_evasions() simply returns the number of moves in +/// evasions phase. It is intended to be used in positions where the side to +/// move is in check, for detecting checkmates or situations where there is +/// only a single reply to check. +/// WARNING: It works as long as PH_EVASIONS is the _only_ phase for evasions. -inline int MovePicker::number_of_moves() const { +inline int MovePicker::number_of_evasions() const { return int(lastMove - moves); } diff --git a/src/position.cpp b/src/position.cpp index c6732257..0208d2a2 100644 --- a/src/position.cpp +++ b/src/position.cpp @@ -940,7 +940,7 @@ void Position::do_capture_move(Bitboard& key, PieceType capture, Color them, Squ // Update piece list, move the last piece at index[capsq] position // - // WARNING: this is a not perfectly revresible operation. When we + // WARNING: This is a not perfectly revresible operation. When we // will reinsert the captured piece in undo_move() we will put it // at the end of the list and not in its original place, it means // index[] and pieceList[] are not guaranteed to be invariant to a diff --git a/src/search.cpp b/src/search.cpp index 12259baf..806a7fc4 100644 --- a/src/search.cpp +++ b/src/search.cpp @@ -1109,7 +1109,7 @@ namespace { { assert(move_is_ok(move)); - bool singleReply = (isCheck && mp.number_of_moves() == 1); + bool singleReply = (isCheck && mp.number_of_evasions() == 1); bool moveIsCheck = pos.move_is_check(move, dcCandidates); bool moveIsCapture = pos.move_is_capture(move); @@ -1366,7 +1366,7 @@ namespace { { assert(move_is_ok(move)); - bool singleReply = (isCheck && mp.number_of_moves() == 1); + bool singleReply = (isCheck && mp.number_of_evasions() == 1); bool moveIsCheck = pos.move_is_check(move, dcCandidates); bool moveIsCapture = pos.move_is_capture(move); -- 2.39.2