- if (TBCardinality >= RootPos.count<ALL_PIECES>(WHITE)
- + RootPos.count<ALL_PIECES>(BLACK))
- {
- // If the current root position is in the tablebases then RootMoves
- // contains only moves that preserve the draw or win.
- RootInTB = Tablebases::root_probe(RootPos, TBScore);
-
- if (RootInTB)
- TBCardinality = 0; // Do not probe tablebases during the search
-
- else // If DTZ tables are missing, use WDL tables as a fallback
- {
- // Filter out moves that do not preserve a draw or win
- RootInTB = Tablebases::root_probe_wdl(RootPos, TBScore);
-
- // Only probe during search if winning
- if (TBScore <= VALUE_DRAW)
- TBCardinality = 0;
- }
-
- if (RootInTB)
- {
- TBHits = RootMoves.size();
-
- if (!TB50MoveRule)
- TBScore = TBScore > VALUE_DRAW ? VALUE_MATE - MAX_PLY - 1
- : TBScore < VALUE_DRAW ? -VALUE_MATE + MAX_PLY + 1
- : VALUE_DRAW;
- }
- }
-
- for (size_t i = 0; i < Threads.size(); ++i)
- Threads[i]->maxPly = 0;