From: Marco Costalba Date: Tue, 25 Dec 2012 10:40:28 +0000 (+0100) Subject: Retire Position::move_is_legal() X-Git-Url: https://git.sesse.net/?p=stockfish;a=commitdiff_plain;h=3b49aeb4f22569c2b5d5ca830858c4dd584fae7f Retire Position::move_is_legal() Use the new contains() method of struct MoveList No functional change. --- diff --git a/src/movegen.h b/src/movegen.h index 84d5d35e..9f45e250 100644 --- a/src/movegen.h +++ b/src/movegen.h @@ -46,6 +46,10 @@ struct MoveList { bool end() const { return cur == last; } Move move() const { return cur->move; } size_t size() const { return last - mlist; } + bool contains(Move m) const { + for (const MoveStack* it(mlist) ; it != last; ++it) if (it->move == m) return true; + return false; + } private: MoveStack mlist[MAX_MOVES]; diff --git a/src/notation.cpp b/src/notation.cpp index 15661eec..85b0abdd 100644 --- a/src/notation.cpp +++ b/src/notation.cpp @@ -108,7 +108,7 @@ const string move_to_san(Position& pos, Move m) { if (m == MOVE_NULL) return "(null)"; - assert(pos.move_is_legal(m)); + assert(MoveList(pos).contains(m)); Bitboard attackers; bool ambiguousMove, ambiguousFile, ambiguousRank; diff --git a/src/position.cpp b/src/position.cpp index 045b10ca..ef5fd970 100644 --- a/src/position.cpp +++ b/src/position.cpp @@ -521,20 +521,6 @@ bool Position::pl_move_is_legal(Move m, Bitboard pinned) const { } -/// Position::move_is_legal() takes a random move and tests whether the move -/// is legal. This version is not very fast and should be used only in non -/// time-critical paths. - -bool Position::move_is_legal(const Move m) const { - - for (MoveList ml(*this); !ml.end(); ++ml) - if (ml.move() == m) - return true; - - return false; -} - - /// Position::is_pseudo_legal() takes a random move and tests whether the move /// is pseudo legal. It is used to validate moves from TT that can be corrupted /// due to SMP concurrent access or hash position key aliasing. @@ -548,7 +534,7 @@ bool Position::is_pseudo_legal(const Move m) const { // Use a slower but simpler function for uncommon cases if (type_of(m) != NORMAL) - return move_is_legal(m); + return MoveList(*this).contains(m); // Is not a promotion, so promotion piece must be empty if (promotion_type(m) - 2 != NO_PIECE_TYPE) diff --git a/src/position.h b/src/position.h index 738fe8c9..e575c3ef 100644 --- a/src/position.h +++ b/src/position.h @@ -137,7 +137,6 @@ public: // Properties of moves bool move_gives_check(Move m, const CheckInfo& ci) const; - bool move_is_legal(const Move m) const; bool pl_move_is_legal(Move m, Bitboard pinned) const; bool is_pseudo_legal(const Move m) const; bool is_capture(Move m) const; diff --git a/src/search.cpp b/src/search.cpp index 292faf04..f7d3a9fd 100644 --- a/src/search.cpp +++ b/src/search.cpp @@ -1540,7 +1540,8 @@ void RootMove::extract_pv_from_tt(Position& pos) { do { pv.push_back(m); - assert(pos.move_is_legal(pv[ply])); + assert(MoveList(pos).contains(pv[ply])); + pos.do_move(pv[ply++], *st++); tte = TT.probe(pos.key()); @@ -1572,7 +1573,8 @@ void RootMove::insert_pv_in_tt(Position& pos) { if (!tte || tte->move() != pv[ply]) // Don't overwrite correct entries TT.store(pos.key(), VALUE_NONE, BOUND_NONE, DEPTH_NONE, pv[ply]); - assert(pos.move_is_legal(pv[ply])); + assert(MoveList(pos).contains(pv[ply])); + pos.do_move(pv[ply++], *st++); } while (pv[ply] != MOVE_NONE);