1
0
Fork 0
mirror of https://github.com/sockspls/badfish synced 2025-04-30 08:43:09 +00:00

Use C++ loops in insert_pv_in_tt

Also small tweak to extract_ponder_from_tt

No functional change.
This commit is contained in:
Marco Costalba 2015-01-31 12:31:00 +01:00
parent bfd0f95f06
commit 45eac9507c
2 changed files with 22 additions and 19 deletions

View file

@ -1461,22 +1461,22 @@ string UCI::pv(const Position& pos, Depth depth, Value alpha, Value beta) {
void RootMove::insert_pv_in_tt(Position& pos) {
StateInfo state[MAX_PLY], *st = state;
size_t idx = 0;
for ( ; idx < pv.size(); ++idx)
{
bool ttHit;
for (Move m : pv)
{
assert(MoveList<LEGAL>(pos).contains(m));
TTEntry* tte = TT.probe(pos.key(), ttHit);
if (!ttHit || tte->move() != pv[idx]) // Don't overwrite correct entries
tte->save(pos.key(), VALUE_NONE, BOUND_NONE, DEPTH_NONE, pv[idx], VALUE_NONE, TT.generation());
if (!ttHit || tte->move() != m) // Don't overwrite correct entries
tte->save(pos.key(), VALUE_NONE, BOUND_NONE, DEPTH_NONE, m, VALUE_NONE, TT.generation());
assert(MoveList<LEGAL>(pos).contains(pv[idx]));
pos.do_move(pv[idx], *st++);
pos.do_move(m, *st++);
}
while (idx) pos.undo_move(pv[--idx]);
for (size_t i = pv.size(); i > 0; )
pos.undo_move(pv[--i]);
}
@ -1485,22 +1485,25 @@ void RootMove::insert_pv_in_tt(Position& pos) {
/// root. We try hard to have a ponder move to return to the GUI, otherwise in case of
/// 'ponder on' we have nothing to think on.
Move RootMove::extract_ponder_from_tt(Position& pos)
bool RootMove::extract_ponder_from_tt(Position& pos)
{
StateInfo st;
bool found;
bool ttHit;
assert(pv.size() == 1);
pos.do_move(pv[0], st);
TTEntry* tte = TT.probe(pos.key(), found);
Move m = found ? tte->move() : MOVE_NONE;
if (!MoveList<LEGAL>(pos).contains(m))
m = MOVE_NONE;
TTEntry* tte = TT.probe(pos.key(), ttHit);
pos.undo_move(pv[0]);
pv.push_back(m);
return m;
if (ttHit)
{
Move m = tte->move(); // Local copy to be SMP safe
if (MoveList<LEGAL>(pos).contains(m))
return pv.push_back(m), true;
}
return false;
}

View file

@ -60,7 +60,7 @@ struct RootMove {
bool operator<(const RootMove& m) const { return score > m.score; } // Ascending sort
bool operator==(const Move& m) const { return pv[0] == m; }
void insert_pv_in_tt(Position& pos);
Move extract_ponder_from_tt(Position& pos);
bool extract_ponder_from_tt(Position& pos);
Value score;
Value previousScore;