X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Fuci.cpp;h=3812a3792c17d068cdb0bccd575e2a3922088f34;hb=5ca428402793b07b432b006056a1368f359c4ea0;hp=b90240961e56ca803e2f3d30fdf3b7044f4f3a9e;hpb=fa49311b362a1ab6e4bd5263c7782b19fa59c41f;p=stockfish diff --git a/src/uci.cpp b/src/uci.cpp index b9024096..3812a379 100644 --- a/src/uci.cpp +++ b/src/uci.cpp @@ -54,7 +54,7 @@ namespace { // The root position. This is set up when the user (or in practice, the GUI) // sends the "position" UCI command. The root position is sent to the think() // function when the program receives the "go" command. - Position RootPosition; + Position RootPosition(StartPosition); // Local functions bool handle_command(const string& command); @@ -107,7 +107,8 @@ namespace { UCIInputParser uip(command); string token; - uip >> token; // operator>>() skips any whitespace + if (!(uip >> token)) // operator>>() skips any whitespace + return true; if (token == "quit") return false; @@ -124,7 +125,7 @@ namespace { } else if (token == "ucinewgame") { - push_button("Clear Hash"); + push_button("New Game"); Position::init_piece_square_tables(); RootPosition.from_fen(StartPosition); } @@ -148,8 +149,8 @@ namespace { else if (token == "eval") { EvalInfo ei; - cout << "Incremental mg: " << RootPosition.mg_value() - << "\nIncremental eg: " << RootPosition.eg_value() + cout << "Incremental mg: " << mg_value(RootPosition.value()) + << "\nIncremental eg: " << eg_value(RootPosition.value()) << "\nFull eval: " << evaluate(RootPosition, ei, 0) << endl; } else if (token == "key") @@ -159,14 +160,8 @@ namespace { else if (token == "perft") perft(uip); else - { cout << "Unknown command: " << command << endl; - while (!uip.eof()) - { - uip >> token; - cout << token << endl; - } - } + return true; } @@ -181,33 +176,33 @@ namespace { string token; - uip >> token; // operator>>() skips any whitespace + if (!(uip >> token)) // operator>>() skips any whitespace + return; if (token == "startpos") RootPosition.from_fen(StartPosition); else if (token == "fen") { string fen; - while (token != "moves" && !uip.eof()) + while (uip >> token && token != "moves") { - uip >> token; fen += token; fen += ' '; } RootPosition.from_fen(fen); } - if (!uip.eof()) + if (uip.good()) { if (token != "moves") uip >> token; + if (token == "moves") { Move move; StateInfo st; - while (!uip.eof()) + while (uip >> token) { - uip >> token; move = move_from_string(RootPosition, token); RootPosition.do_move(move, st); if (RootPosition.rule_50_counter() == 0) @@ -215,7 +210,7 @@ namespace { } // Our StateInfo st is about going out of scope so copy // its content inside RootPosition before they disappear. - RootPosition.saveState(); + RootPosition.detach(); } } } @@ -231,18 +226,14 @@ namespace { string token, name; - uip >> token; - if (token == "name") - { - uip >> name; - while (!uip.eof()) - { - uip >> token; - if (token == "value") - break; + if (!(uip >> token)) // operator>>() skips any whitespace + return; + if (token == "name" && uip >> name) + { + while (uip >> token && token != "value") name += (" " + token); - } + if (token == "value") { // Reads until end of line and left trim white space @@ -276,10 +267,8 @@ namespace { searchMoves[0] = MOVE_NONE; - while (!uip.eof()) + while (uip >> token) { - uip >> token; - if (token == "infinite") infinite = true; else if (token == "ponder") @@ -324,18 +313,16 @@ namespace { void perft(UCIInputParser& uip) { string token; - int depth = 0; + int depth, tm, n; + Position pos(RootPosition); - while (!uip.eof()) - { - uip >> token; + if (!(uip >> depth)) + return; + + tm = get_system_time(); + + n = perft(pos, depth * OnePly); - if (token == "depth") - uip >> depth; - } - Position pos = RootPosition; - int tm = get_system_time(); - int n = perft(pos, depth * OnePly); tm = get_system_time() - tm; std::cout << "\nNodes " << n << "\nTime (ms) " << tm