]> git.sesse.net Git - stockfish/blobdiff - src/main.cpp
When returning gRPC probes, report scores from white's perspective.
[stockfish] / src / main.cpp
index 6c1aa034c318e9802c9e082d4db2394cc0ded307..33a8f523da763ba9b8347e51962d0b3f350072ba 100644 (file)
@@ -45,21 +45,33 @@ public:
        Status Probe(ServerContext* context,
                     const HashProbeRequest* request,
                     HashProbeResponse *response) {
-               std::cout << "fen=" << request->fen() << std::endl;
                Position pos(request->fen(), /*isChess960=*/false, Threads.main());
                if (!pos.pos_is_ok()) {
                        return Status(StatusCode::INVALID_ARGUMENT, "Invalid FEN");
                }
-               std::cout << "parsed=" << pos.fen() << std::endl;
                bool found;
                TTEntry *entry = TT.probe(pos.key(), found);
                response->set_found(found);
                if (found) {
+                       Value value = entry->value();
+                       Value eval = entry->eval();
+                       Bound bound = entry->bound();
+
+                       if (pos.side_to_move() == BLACK) {
+                               value = -value;
+                               eval = -eval;
+                               if (bound == BOUND_UPPER) {
+                                       bound = BOUND_LOWER;
+                               } else if (bound == BOUND_LOWER) {
+                                       bound = BOUND_UPPER;
+                               }
+                       }
+
                        response->set_move(entry->move());
-                       response->set_value(entry->value());
-                       response->set_eval(entry->eval());
                        response->set_depth(entry->depth());
-                       response->set_bound(entry->bound());
+                       response->set_eval(eval);
+                       response->set_value(value);
+                       response->set_bound(HashProbeResponse::ValueBound(bound));
                }
                return Status::OK;
        }