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;
// 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.
// 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);
// 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.