X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Fsyzygy%2Ftbprobe.cpp;h=8b87c250662ef60d013331911f41adafd0fc815e;hb=d5f883ab29d43b35746ff605cf13c3722df56041;hp=0805975b1e381a630e9e9e1ee8f55ec60cb56ff2;hpb=2c237da54647bb7526f3512bea183eb44919cdda;p=stockfish diff --git a/src/syzygy/tbprobe.cpp b/src/syzygy/tbprobe.cpp index 0805975b..8b87c250 100644 --- a/src/syzygy/tbprobe.cpp +++ b/src/syzygy/tbprobe.cpp @@ -489,8 +489,8 @@ void HashTable::insert(const std::vector& pieces) { MaxCardinality = std::max((int)pieces.size(), MaxCardinality); - wdlTable.push_back(WDLEntry(code)); - dtzTable.push_back(DTZEntry(wdlTable.back())); + wdlTable.emplace_back(code); + dtzTable.emplace_back(wdlTable.back()); insert(wdlTable.back().key , &wdlTable.back(), &dtzTable.back()); insert(wdlTable.back().key2, &wdlTable.back(), &dtzTable.back()); @@ -713,8 +713,9 @@ T do_probe_table(const Position& pos, Entry* entry, WDLScore wdl, ProbeState* re assert(type_of(pc) == PAWN); leadPawns = b = pos.pieces(color_of(pc), PAWN); - while (b) + do squares[size++] = pop_lsb(&b) ^ flipSquares; + while (b); leadPawnsCnt = size; @@ -737,11 +738,13 @@ T do_probe_table(const Position& pos, Entry* entry, WDLScore wdl, ProbeState* re // Now we are ready to get all the position pieces (but the lead pawns) and // directly map them to the correct color and square. b = pos.pieces() ^ leadPawns; - while (b) { + do { Square s = pop_lsb(&b); squares[size] = s ^ flipSquares; pieces[size++] = Piece(pos.piece_on(s) ^ flipColor); - } + } while (b); + + assert(size >= 2); // Then we reorder the pieces to have the same sequence as the one stored // in precomp->pieces[i]: the sequence that ensures the best compression. @@ -1517,6 +1520,8 @@ static int has_repeated(StateInfo *st) // no moves were filtered out. bool Tablebases::root_probe(Position& pos, Search::RootMoves& rootMoves, Value& score) { + assert(rootMoves.size()); + ProbeState result; int dtz = probe_dtz(pos, &result); @@ -1562,7 +1567,7 @@ bool Tablebases::root_probe(Position& pos, Search::RootMoves& rootMoves, Value& // Obtain 50-move counter for the root position. // In Stockfish there seems to be no clean way, so we do it like this: - int cnt50 = st.previous->rule50; + int cnt50 = st.previous ? st.previous->rule50 : 0; // Use 50-move counter to determine whether the root position is // won, lost or drawn.