Преглед изворни кода

LibChess: Add optional ponder move to the BestMove command

The BestMove command can now include an optional ponder token, with
the move that the engine would like to ponder on.
Tim Ledbetter пре 2 година
родитељ
комит
25778d07e9
2 измењених фајлова са 17 додато и 3 уклоњено
  1. 13 2
      Userland/Libraries/LibChess/UCICommand.cpp
  2. 4 1
      Userland/Libraries/LibChess/UCICommand.h

+ 13 - 2
Userland/Libraries/LibChess/UCICommand.cpp

@@ -311,8 +311,15 @@ ErrorOr<NonnullOwnPtr<BestMoveCommand>> BestMoveCommand::from_string(StringView
 {
 {
     auto tokens = command.split_view(' ');
     auto tokens = command.split_view(' ');
     VERIFY(tokens[0] == "bestmove");
     VERIFY(tokens[0] == "bestmove");
-    VERIFY(tokens.size() == 2);
-    return adopt_nonnull_own_or_enomem(new (nothrow) BestMoveCommand(Move(tokens[1])));
+    VERIFY(tokens.size() == 2 || tokens.size() == 4);
+    auto best_move = Move(tokens[1]);
+    Optional<Move> move_to_ponder;
+    if (tokens.size() == 4) {
+        VERIFY(tokens[2] == "ponder");
+        move_to_ponder = Move(tokens[3]);
+    }
+
+    return adopt_nonnull_own_or_enomem(new (nothrow) BestMoveCommand(best_move, move_to_ponder));
 }
 }
 
 
 ErrorOr<String> BestMoveCommand::to_string() const
 ErrorOr<String> BestMoveCommand::to_string() const
@@ -320,6 +327,10 @@ ErrorOr<String> BestMoveCommand::to_string() const
     StringBuilder builder;
     StringBuilder builder;
     TRY(builder.try_append("bestmove "sv));
     TRY(builder.try_append("bestmove "sv));
     TRY(builder.try_append(TRY(move().to_long_algebraic())));
     TRY(builder.try_append(TRY(move().to_long_algebraic())));
+    if (move_to_ponder().has_value()) {
+        TRY(builder.try_append(" ponder "sv));
+        TRY(builder.try_append(TRY(move_to_ponder()->to_long_algebraic())));
+    }
     TRY(builder.try_append('\n'));
     TRY(builder.try_append('\n'));
     return builder.to_string();
     return builder.to_string();
 }
 }

+ 4 - 1
Userland/Libraries/LibChess/UCICommand.h

@@ -229,9 +229,10 @@ public:
 
 
 class BestMoveCommand : public Command {
 class BestMoveCommand : public Command {
 public:
 public:
-    explicit BestMoveCommand(Chess::Move move)
+    explicit BestMoveCommand(Chess::Move move, Optional<Chess::Move> move_to_ponder = {})
         : Command(Command::Type::BestMove)
         : Command(Command::Type::BestMove)
         , m_move(::move(move))
         , m_move(::move(move))
+        , m_move_to_ponder(::move(move_to_ponder))
     {
     {
     }
     }
 
 
@@ -240,9 +241,11 @@ public:
     virtual ErrorOr<String> to_string() const override;
     virtual ErrorOr<String> to_string() const override;
 
 
     Chess::Move move() const { return m_move; }
     Chess::Move move() const { return m_move; }
+    Optional<Chess::Move> move_to_ponder() const { return m_move_to_ponder; }
 
 
 private:
 private:
     Chess::Move m_move;
     Chess::Move m_move;
+    Optional<Chess::Move> m_move_to_ponder;
 };
 };
 
 
 class InfoCommand : public Command {
 class InfoCommand : public Command {