From: protonspring Date: Wed, 17 Apr 2019 19:13:39 +0000 (-0600) Subject: Remove Movepick::move (#2085) X-Git-Url: https://git.sesse.net/?p=stockfish;a=commitdiff_plain;h=c4fc00ec49d748f1ec1cd2fa2affa73bfdc86f8f Remove Movepick::move (#2085) The "move" class variable is Movepick is removed (removes some abstraction) which saves a few assignment operations, and the effects of "filter" is limited to the current move (movePtr). The resulting code is a bit more verbose, but it is also more clear what is going on. This version is NOT tested, but is substantially similar to: STC LLR: 2.96 (-2.94,2.94) [-3.00,1.00] Total: 29191 W: 6474 L: 6367 D: 16350 http://tests.stockfishchess.org/tests/view/5ca7aab50ebc5925cf006e50 This is a non-functional simplification. --- diff --git a/src/movepick.cpp b/src/movepick.cpp index 86eb98aa..a70785e7 100644 --- a/src/movepick.cpp +++ b/src/movepick.cpp @@ -139,12 +139,12 @@ Move MovePicker::select(Pred filter) { if (T == Best) std::swap(*cur, *std::max_element(cur, endMoves)); - move = *cur++; + if (*cur != ttMove && filter()) + return *cur++; - if (move != ttMove && filter()) - return move; + cur++; } - return move = MOVE_NONE; + return MOVE_NONE; } /// MovePicker::next_move() is the most important method of the MovePicker class. It @@ -174,10 +174,10 @@ top: case GOOD_CAPTURE: if (select([&](){ - return pos.see_ge(move, Value(-55 * (cur-1)->value / 1024)) ? + return pos.see_ge(*cur, Value(-55 * cur->value / 1024)) ? // Move losing capture to endBadCaptures to be tried later - true : (*endBadCaptures++ = move, false); })) - return move; + true : (*endBadCaptures++ = *cur, false); })) + return *(cur - 1); // Prepare the pointers to loop over the refutations array cur = std::begin(refutations); @@ -192,10 +192,10 @@ top: /* fallthrough */ case REFUTATION: - if (select([&](){ return move != MOVE_NONE - && !pos.capture(move) - && pos.pseudo_legal(move); })) - return move; + if (select([&](){ return *cur != MOVE_NONE + && !pos.capture(*cur) + && pos.pseudo_legal(*cur); })) + return *(cur - 1); ++stage; /* fallthrough */ @@ -210,10 +210,10 @@ top: case QUIET: if ( !skipQuiets - && select([&](){return move != refutations[0] - && move != refutations[1] - && move != refutations[2];})) - return move; + && select([&](){return *cur != refutations[0].move + && *cur != refutations[1].move + && *cur != refutations[2].move;})) + return *(cur - 1); // Prepare the pointers to loop over the bad captures cur = moves; @@ -237,12 +237,12 @@ top: return select([](){ return true; }); case PROBCUT: - return select([&](){ return pos.see_ge(move, threshold); }); + return select([&](){ return pos.see_ge(*cur, threshold); }); case QCAPTURE: if (select([&](){ return depth > DEPTH_QS_RECAPTURES - || to_sq(move) == recaptureSquare; })) - return move; + || to_sq(*cur) == recaptureSquare; })) + return *(cur - 1); // If we did not find any move and we do not try checks, we have finished if (depth != DEPTH_QS_CHECKS) diff --git a/src/movepick.h b/src/movepick.h index d9ecba99..e916514d 100644 --- a/src/movepick.h +++ b/src/movepick.h @@ -142,7 +142,6 @@ private: Move ttMove; ExtMove refutations[3], *cur, *endMoves, *endBadCaptures; int stage; - Move move; Square recaptureSquare; Value threshold; Depth depth;