#ifndef RTB_PROBE_HPP_
 
#define RTB_PROBE_HPP_
 
 
 
#include <string>
 
 
 
class Position;
 
 
 
namespace Syzygy {
 
 
 
extern int TBLargest;
 
 
 
void init(const std::string& path);
 
 
 
// Probe the WDL table for a particular position.
 
// If *success != 0, the probe was successful.
 
// The return value is from the point of view of the side to move:
 
// -2 : loss
 
// -1 : loss, but draw under 50-move rule
 
//  0 : draw
 
//  1 : win, but draw under 50-move rule
 
//  2 : win
 
int probe_wdl(Position& pos, int *success);
 
 
 
// Probe the DTZ table for a particular position.
 
// If *success != 0, the probe was successful.
 
// The return value is from the point of view of the side to move:
 
//         n < -100 : loss, but draw under 50-move rule
 
// -100 <= n < -1   : loss in n ply (assuming 50-move counter == 0)
 
//         0        : draw
 
//     1 < n <= 100 : win in n ply (assuming 50-move counter == 0)
 
//   100 < n        : win, but draw under 50-move rule
 
//
 
// The return value n can be off by 1: a return value -n can mean a loss
 
// in n+1 ply and a return value +n can mean a win in n+1 ply. This
 
// cannot happen for tables with positions exactly on the "edge" of
 
// the 50-move rule.
 
//
 
// This implies that if dtz > 0 is returned, the position is certainly
 
// a win if dtz + 50-move-counter <= 99. Care must be taken that the engine
 
// picks moves that preserve dtz + 50-move-counter <= 99.
 
//
 
// If n = 100 immediately after a capture or pawn move, then the position
 
// is also certainly a win, and during the whole phase until the next
 
// capture or pawn move, the inequality to be preserved is
 
// dtz + 50-movecounter <= 100.
 
//
 
// In short, if a move is available resulting in dtz + 50-move-counter <= 99,
 
// then do not accept moves leading to dtz + 50-move-counter == 100.
 
//
 
int probe_dtz(Position& pos, int *success);
 
 
 
}
 
 
 
#endif