X-Git-Url: https://git.sesse.net/?p=stockfish;a=blobdiff_plain;f=src%2Fuci.cpp;h=51eb15b671f380d0542880c9c4e200f8a41adf87;hp=c4c1a03705924516558ac8c5651b7bd63bc13bf5;hb=6247f27a0548562c122f658082d31f535208d603;hpb=403db5a6e9f004e39773dbc6cea9d1a99c81a233 diff --git a/src/uci.cpp b/src/uci.cpp index c4c1a037..51eb15b6 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; @@ -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") @@ -303,18 +292,13 @@ namespace { else if (token == "searchmoves") { int numOfMoves = 0; - while (!uip.eof()) - { - uip >> token; + while (uip >> token) searchMoves[numOfMoves++] = move_from_string(RootPosition, token); - } + searchMoves[numOfMoves] = MOVE_NONE; } } - if (moveTime) - infinite = true; // HACK - assert(RootPosition.is_ok()); return think(RootPosition, infinite, ponder, RootPosition.side_to_move(), @@ -325,12 +309,11 @@ namespace { string token; int depth, tm, n; - Position pos = RootPosition; + Position pos(RootPosition); - if (uip.eof()) + if (!(uip >> depth)) return; - uip >> depth; tm = get_system_time(); n = perft(pos, depth * OnePly);