Use a std::vector to store searchMoves
authorMarco Costalba <mcostalba@gmail.com>
Sun, 1 Apr 2012 11:26:14 +0000 (12:26 +0100)
committerMarco Costalba <mcostalba@gmail.com>
Sun, 1 Apr 2012 11:45:43 +0000 (12:45 +0100)
A std::set (that is a rb_tree) seems really
overkill to store at most a handful of moves
and nothing in the common case.

No functional change.

Signed-off-by: Marco Costalba <mcostalba@gmail.com>
src/benchmark.cpp
src/main.cpp
src/thread.cpp
src/thread.h
src/uci.cpp

index fbf5a46..c31609b 100644 (file)
@@ -118,7 +118,7 @@ void benchmark(istringstream& is) {
       }
       else
       {
-          Threads.start_searching(pos, limits);
+          Threads.start_searching(pos, limits, vector<Move>());
           Threads.wait_for_search_finished();
           nodes += Search::RootPosition.nodes_searched();
       }
index 087f6dd..6e88988 100644 (file)
@@ -46,7 +46,7 @@ int main(int argc, char* argv[]) {
   std::string args;
 
   for (int i = 1; i < argc; i++)
-      args += std::string(" ") + argv[i];
+      args += std::string(argv[i]) + " ";
 
   uci_loop(args);
 }
index 2dcbf91..8d66988 100644 (file)
@@ -429,7 +429,7 @@ void ThreadsManager::wait_for_search_finished() {
 // main_loop() so to start a new search, then returns immediately.
 
 void ThreadsManager::start_searching(const Position& pos, const LimitsType& limits,
-                                     const std::set<Move>& searchMoves) {
+                                     const std::vector<Move>& searchMoves) {
   wait_for_search_finished();
 
   SearchTime.restart(); // As early as possible
@@ -442,7 +442,7 @@ void ThreadsManager::start_searching(const Position& pos, const LimitsType& limi
   RootMoves.clear();
 
   for (MoveList<MV_LEGAL> ml(pos); !ml.end(); ++ml)
-      if (searchMoves.empty() || searchMoves.count(ml.move()))
+      if (searchMoves.empty() || count(searchMoves.begin(), searchMoves.end(), ml.move()))
           RootMoves.push_back(RootMove(ml.move()));
 
   threads[0]->do_sleep = false;
index 3d17548..fe2cf42 100644 (file)
@@ -20,7 +20,6 @@
 #if !defined(THREAD_H_INCLUDED)
 #define THREAD_H_INCLUDED
 
-#include <set>
 #include <vector>
 
 #include "material.h"
@@ -126,7 +125,7 @@ public:
   void set_timer(int msec);
   void wait_for_search_finished();
   void start_searching(const Position& pos, const Search::LimitsType& limits,
-                       const std::set<Move>& = std::set<Move>());
+                       const std::vector<Move>& searchMoves);
 
   template <bool Fake>
   Value split(Position& pos, Search::Stack* ss, Value alpha, Value beta, Value bestValue, Move* bestMove,
index a2998e6..a10920a 100644 (file)
@@ -212,7 +212,7 @@ namespace {
   void go(Position& pos, istringstream& is) {
 
     Search::LimitsType limits;
-    std::set<Move> searchMoves;
+    vector<Move> searchMoves;
     string token;
 
     while (is >> token)
@@ -239,7 +239,7 @@ namespace {
             limits.ponder = true;
         else if (token == "searchmoves")
             while (is >> token)
-                searchMoves.insert(move_from_uci(pos, token));
+                searchMoves.push_back(move_from_uci(pos, token));
     }
 
     Threads.start_searching(pos, limits, searchMoves);
@@ -263,8 +263,8 @@ namespace {
 
     int e = time.elapsed();
 
-    std::cout << "\nNodes " << n
-              << "\nTime (ms) " << e
-              << "\nNodes/second " << int(n / (e / 1000.0)) << std::endl;
+    cout << "\nNodes " << n
+         << "\nTime (ms) " << e
+         << "\nNodes/second " << int(n / (e / 1000.0)) << endl;
   }
 }