#define @COMPILE_PLATFORM@ #ifdef UNIX #include "ProcessLinux.hpp" #define INIT_PROCESS(p) \ { p = static_cast(new ProcessLinux()); } #endif #ifdef WIN32 #include "ProcessWindows.hpp" #define INIT_PROCESS(p) \ { p = static_cast(new ProcessWindows()); } #endif #include #include #include #include #include #define IS_OPT_PARAM(str) \ ((str) == "name" || (str) == "type" | (str) == "default" || \ (str) == "min" || (str) == "max" || (str) == "var") namespace uciadapter { /// @brief Empty string and option if not specified typedef struct Option { std::string name; std::string type; std::string default_value; std::string min; std::string max; std::string var; } Option; /// @brief All long are initiated to -1 if not set class Info { public: long depth; long seldepth; long multipv; long score_cp; long score_mate; long score_lowerbound; long score_upperbound; long cp; long nodes; long nps; long tbhits; long time; long hashfull; long cpuload; long currmovenumber; std::vector pv; std::string currmove; Info(); }; /// @brief Calling go(Go()) will perform a Command("go"). Just leave unused /// parameters untouched class Go { public: std::string searchmoves; std::string ponder; int wtime, btime, winc, binc, movestogo, depth, nodes, mate, movetime; bool infinite; Go(); }; class UCI { Process *p; /// @brief Reset on each call to go() std::string buffer; /// @brief Reset on each call to go() std::string bestmove, ponder; /// @brief Setup on engine startup std::string name, author; /// @brief Setup on engine startup std::vector