mirror of
https://github.com/sockspls/badfish
synced 2025-05-01 09:13:08 +00:00
Reshuffle in uci.cpp
Move function definitions before call site. No functional change.
This commit is contained in:
parent
17cb7e7fa3
commit
ada55c5d0a
1 changed files with 77 additions and 83 deletions
160
src/uci.cpp
160
src/uci.cpp
|
@ -44,89 +44,6 @@ namespace {
|
||||||
// draw detection code.
|
// draw detection code.
|
||||||
Search::StateStackPtr SetupStates;
|
Search::StateStackPtr SetupStates;
|
||||||
|
|
||||||
void setoption(istringstream& up);
|
|
||||||
void position(Position& pos, istringstream& up);
|
|
||||||
void go(const Position& pos, istringstream& up);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/// Wait for a command from the user, parse this text string as an UCI command,
|
|
||||||
/// and call the appropriate functions. Also intercepts EOF from stdin to ensure
|
|
||||||
/// that we exit gracefully if the GUI dies unexpectedly. In addition to the UCI
|
|
||||||
/// commands, the function also supports a few debug commands.
|
|
||||||
|
|
||||||
void UCI::loop(const string& args) {
|
|
||||||
|
|
||||||
Position pos(StartFEN, false, Threads.main()); // The root position
|
|
||||||
string token, cmd = args;
|
|
||||||
|
|
||||||
do {
|
|
||||||
if (args.empty() && !getline(cin, cmd)) // Block here waiting for input
|
|
||||||
cmd = "quit";
|
|
||||||
|
|
||||||
istringstream is(cmd);
|
|
||||||
|
|
||||||
is >> skipws >> token;
|
|
||||||
|
|
||||||
if (token == "quit" || token == "stop" || token == "ponderhit")
|
|
||||||
{
|
|
||||||
// The GUI sends 'ponderhit' to tell us to ponder on the same move the
|
|
||||||
// opponent has played. In case Signals.stopOnPonderhit is set we are
|
|
||||||
// waiting for 'ponderhit' to stop the search (for instance because we
|
|
||||||
// already ran out of time), otherwise we should continue searching but
|
|
||||||
// switch from pondering to normal search.
|
|
||||||
if (token != "ponderhit" || Search::Signals.stopOnPonderhit)
|
|
||||||
{
|
|
||||||
Search::Signals.stop = true;
|
|
||||||
Threads.main()->notify_one(); // Could be sleeping
|
|
||||||
}
|
|
||||||
else
|
|
||||||
Search::Limits.ponder = false;
|
|
||||||
}
|
|
||||||
else if (token == "perft" && (is >> token)) // Read perft depth
|
|
||||||
{
|
|
||||||
stringstream ss;
|
|
||||||
|
|
||||||
ss << Options["Hash"] << " "
|
|
||||||
<< Options["Threads"] << " " << token << " current perft";
|
|
||||||
|
|
||||||
benchmark(pos, ss);
|
|
||||||
}
|
|
||||||
else if (token == "key")
|
|
||||||
sync_cout << hex << uppercase << setfill('0')
|
|
||||||
<< "position key: " << setw(16) << pos.key()
|
|
||||||
<< "\nmaterial key: " << setw(16) << pos.material_key()
|
|
||||||
<< "\npawn key: " << setw(16) << pos.pawn_key()
|
|
||||||
<< dec << sync_endl;
|
|
||||||
|
|
||||||
else if (token == "uci")
|
|
||||||
sync_cout << "id name " << engine_info(true)
|
|
||||||
<< "\n" << Options
|
|
||||||
<< "\nuciok" << sync_endl;
|
|
||||||
|
|
||||||
else if (token == "eval")
|
|
||||||
{
|
|
||||||
Search::RootColor = pos.side_to_move(); // Ensure it is set
|
|
||||||
sync_cout << Eval::trace(pos) << sync_endl;
|
|
||||||
}
|
|
||||||
else if (token == "ucinewgame") TT.clear();
|
|
||||||
else if (token == "go") go(pos, is);
|
|
||||||
else if (token == "position") position(pos, is);
|
|
||||||
else if (token == "setoption") setoption(is);
|
|
||||||
else if (token == "flip") pos.flip();
|
|
||||||
else if (token == "bench") benchmark(pos, is);
|
|
||||||
else if (token == "d") sync_cout << pos.pretty() << sync_endl;
|
|
||||||
else if (token == "isready") sync_cout << "readyok" << sync_endl;
|
|
||||||
else
|
|
||||||
sync_cout << "Unknown command: " << cmd << sync_endl;
|
|
||||||
|
|
||||||
} while (token != "quit" && args.empty()); // Args have one-shot behaviour
|
|
||||||
|
|
||||||
Threads.wait_for_think_finished(); // Cannot quit whilst the search is running
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
namespace {
|
|
||||||
|
|
||||||
// position() is called when engine receives the "position" UCI command.
|
// position() is called when engine receives the "position" UCI command.
|
||||||
// The function sets up the position described in the given FEN string ("fen")
|
// The function sets up the position described in the given FEN string ("fen")
|
||||||
|
@ -217,4 +134,81 @@ namespace {
|
||||||
|
|
||||||
Threads.start_thinking(pos, limits, SetupStates);
|
Threads.start_thinking(pos, limits, SetupStates);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
} // namespace
|
||||||
|
|
||||||
|
|
||||||
|
/// Wait for a command from the user, parse this text string as an UCI command,
|
||||||
|
/// and call the appropriate functions. Also intercepts EOF from stdin to ensure
|
||||||
|
/// that we exit gracefully if the GUI dies unexpectedly. In addition to the UCI
|
||||||
|
/// commands, the function also supports a few debug commands.
|
||||||
|
|
||||||
|
void UCI::loop(const string& args) {
|
||||||
|
|
||||||
|
Position pos(StartFEN, false, Threads.main()); // The root position
|
||||||
|
string token, cmd = args;
|
||||||
|
|
||||||
|
do {
|
||||||
|
if (args.empty() && !getline(cin, cmd)) // Block here waiting for input
|
||||||
|
cmd = "quit";
|
||||||
|
|
||||||
|
istringstream is(cmd);
|
||||||
|
|
||||||
|
is >> skipws >> token;
|
||||||
|
|
||||||
|
if (token == "quit" || token == "stop" || token == "ponderhit")
|
||||||
|
{
|
||||||
|
// The GUI sends 'ponderhit' to tell us to ponder on the same move the
|
||||||
|
// opponent has played. In case Signals.stopOnPonderhit is set we are
|
||||||
|
// waiting for 'ponderhit' to stop the search (for instance because we
|
||||||
|
// already ran out of time), otherwise we should continue searching but
|
||||||
|
// switch from pondering to normal search.
|
||||||
|
if (token != "ponderhit" || Search::Signals.stopOnPonderhit)
|
||||||
|
{
|
||||||
|
Search::Signals.stop = true;
|
||||||
|
Threads.main()->notify_one(); // Could be sleeping
|
||||||
|
}
|
||||||
|
else
|
||||||
|
Search::Limits.ponder = false;
|
||||||
|
}
|
||||||
|
else if (token == "perft" && (is >> token)) // Read perft depth
|
||||||
|
{
|
||||||
|
stringstream ss;
|
||||||
|
|
||||||
|
ss << Options["Hash"] << " "
|
||||||
|
<< Options["Threads"] << " " << token << " current perft";
|
||||||
|
|
||||||
|
benchmark(pos, ss);
|
||||||
|
}
|
||||||
|
else if (token == "key")
|
||||||
|
sync_cout << hex << uppercase << setfill('0')
|
||||||
|
<< "position key: " << setw(16) << pos.key()
|
||||||
|
<< "\nmaterial key: " << setw(16) << pos.material_key()
|
||||||
|
<< "\npawn key: " << setw(16) << pos.pawn_key()
|
||||||
|
<< dec << sync_endl;
|
||||||
|
|
||||||
|
else if (token == "uci")
|
||||||
|
sync_cout << "id name " << engine_info(true)
|
||||||
|
<< "\n" << Options
|
||||||
|
<< "\nuciok" << sync_endl;
|
||||||
|
|
||||||
|
else if (token == "eval")
|
||||||
|
{
|
||||||
|
Search::RootColor = pos.side_to_move(); // Ensure it is set
|
||||||
|
sync_cout << Eval::trace(pos) << sync_endl;
|
||||||
|
}
|
||||||
|
else if (token == "ucinewgame") TT.clear();
|
||||||
|
else if (token == "go") go(pos, is);
|
||||||
|
else if (token == "position") position(pos, is);
|
||||||
|
else if (token == "setoption") setoption(is);
|
||||||
|
else if (token == "flip") pos.flip();
|
||||||
|
else if (token == "bench") benchmark(pos, is);
|
||||||
|
else if (token == "d") sync_cout << pos.pretty() << sync_endl;
|
||||||
|
else if (token == "isready") sync_cout << "readyok" << sync_endl;
|
||||||
|
else
|
||||||
|
sync_cout << "Unknown command: " << cmd << sync_endl;
|
||||||
|
|
||||||
|
} while (token != "quit" && args.empty()); // Args have one-shot behaviour
|
||||||
|
|
||||||
|
Threads.wait_for_think_finished(); // Cannot quit whilst the search is running
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue