nicolaswinkler hace 7 años
padre
commit
f7d0b6fe1b
Se han modificado 4 ficheros con 40 adiciones y 15 borrados
  1. 16 0
      src/Board.h
  2. 6 0
      src/TimeManager.cpp
  3. 1 0
      src/TimeManager.h
  4. 17 15
      src/UciParser.cpp

+ 16 - 0
src/Board.h

@@ -66,6 +66,10 @@ public:
     inline Bitboard* getBitboards  (void) { return side == WHITE_SIDE ? whites : blacks; }
 
     template<Side side>
+    inline const Bitboard* getBitboards(void) const { return side == WHITE_SIDE ? whites : blacks; }
+
+
+    template<Side side>
     inline Bitboard& getPawns      (void) { return getBitboards<side>()[PAWN]; }
     template<Side side>
     inline Bitboard& getKnights    (void) { return getBitboards<side>()[KNIGHT]; }
@@ -78,6 +82,18 @@ public:
     template<Side side>
     inline Bitboard& getKing       (void) { return getBitboards<side>()[KING]; }
 
+    template<Side side>
+    inline const Bitboard& getPawns(void) const { return getBitboards<side>()[PAWN]; }
+    template<Side side>
+    inline const Bitboard& getKnights(void) const  { return getBitboards<side>()[KNIGHT]; }
+    template<Side side>
+    inline const Bitboard& getBishops(void) const  { return getBitboards<side>()[BISHOP]; }
+    template<Side side>
+    inline const Bitboard& getRooks(void) const  { return getBitboards<side>()[ROOK]; }
+    template<Side side>
+    inline const Bitboard& getQueens(void) const  { return getBitboards<side>()[QUEEN]; }
+    template<Side side>
+    inline const Bitboard& getKing (void) const  { return getBitboards<side>()[KING]; }
 
     /*!
      * parses the first part of a FEN string and sets the board

+ 6 - 0
src/TimeManager.cpp

@@ -11,6 +11,12 @@ void TimeManager::stop(void)
 }
 
 
+void TimeManager::join(void)
+{
+    searchThread.join();
+}
+
+
 void TimeManager::startSearch(void)
 {
     startInfiniteSearch();

+ 1 - 0
src/TimeManager.h

@@ -34,6 +34,7 @@ public:
     void startInfiniteSearch(void);
 
     virtual void stop(void);
+    virtual void join(void);
     virtual void startSearch(void);
     virtual bool isRunning(void) const;
 };

+ 17 - 15
src/UciParser.cpp

@@ -7,17 +7,17 @@
 using namespace std;
 
 const map<std::string, UciParser::CommandHandler> UciParser::commandHandlers = {
-    {"uci",         &UciParser::uci },
-    {"debug",       &UciParser::debug },
-    {"isready",     &UciParser::isready },
-    {"setoption",   &UciParser::setoption },
-    {"register",    &UciParser::doNothing },
-    {"ucinewgame",  &UciParser::ucinewgame },
-    {"position",    &UciParser::position },
-    {"go",          &UciParser::go },
-    {"stop",        &UciParser::stop },
-    {"quit",        &UciParser::quit },
-    {"getfen",      &UciParser::getfen},
+    { "uci",         &UciParser::uci },
+    { "debug",       &UciParser::debug },
+    { "isready",     &UciParser::isready },
+    { "setoption",   &UciParser::setoption },
+    { "register",    &UciParser::doNothing },
+    { "ucinewgame",  &UciParser::ucinewgame },
+    { "position",    &UciParser::position },
+    { "go",          &UciParser::go },
+    { "stop",        &UciParser::stop },
+    { "quit",        &UciParser::quit },
+    { "getfen",      &UciParser::getfen },
 };
 
 
@@ -151,9 +151,7 @@ void UciParser::position(const vector<string>& args)
 
 void UciParser::go(const vector<string>& args)
 {
-    if (fst) {
-        fst->stop();
-    }
+    stop({});
 
     fst = make_unique<FixedSearchTimer>(cg, *this);
 
@@ -175,7 +173,11 @@ void UciParser::go(const vector<string>& args)
 
 void UciParser::stop(const vector<string>& args)
 {
-    
+    if (fst) {
+        fst->stop();
+        fst->join();
+        fst = nullptr;
+    }
 }