Movepick: add and use find_best_index() helper
authorMarco Costalba <mcostalba@gmail.com>
Fri, 17 Oct 2008 06:25:39 +0000 (08:25 +0200)
committerMarco Costalba <mcostalba@gmail.com>
Sat, 18 Oct 2008 19:35:33 +0000 (21:35 +0200)
This removes a bunch of redundant code.

No functional change.

Signed-off-by: Marco Costalba <mcostalba@gmail.com>
src/movepick.cpp
src/movepick.h

index e7ae8c369a29d8b6248c181f298037788771ee38..9a389c6b6b4f211cb24eb94774f40995dc45749a 100644 (file)
@@ -73,11 +73,11 @@ MovePicker::MovePicker(const Position& p, bool pvnode, Move ttm, Move mk,
   numOfBadCaptures = 0;
   dc = p.discovered_check_candidates(p.side_to_move());
 
-  if(p.is_check())
+  if (p.is_check())
     phaseIndex = EvasionsPhaseIndex;
-  else if(depth > Depth(0))
+  else if (depth > Depth(0))
     phaseIndex = MainSearchPhaseIndex;
-  else if(depth == Depth(0))
+  else if (depth == Depth(0))
     phaseIndex = QsearchWithChecksPhaseIndex;
   else
     phaseIndex = QsearchWithoutChecksPhaseIndex;
@@ -273,6 +273,23 @@ void MovePicker::score_qcaptures() {
 }
 
 
+/// find_best_index() loops across the moves and returns index of
+/// the highest scored one.
+
+int MovePicker::find_best_index() {
+
+  int bestScore = -10000000, bestIndex = -1;
+
+  for (int i = movesPicked; i < numOfMoves; i++)
+      if (moves[i].score > bestScore)
+      {
+          bestIndex = i;
+          bestScore = moves[i].score;
+      }
+  return bestIndex;
+}
+
+
 /// MovePicker::pick_move_from_list() picks the move with the biggest score
 /// from a list of generated moves (moves[] or badCaptures[], depending on
 /// the current move generation phase).  It takes care not to return the
@@ -283,7 +300,6 @@ void MovePicker::score_qcaptures() {
 
 Move MovePicker::pick_move_from_list() {
 
-  int bestScore = -10000000;
   int bestIndex;
   Move move;
 
@@ -294,7 +310,7 @@ Move MovePicker::pick_move_from_list() {
       assert(movesPicked >= 0);
       while (movesPicked < numOfMoves)
       {
-          bestScore = -10000000;
+          int bestScore = -10000000;
           bestIndex = -1;
           for (int i = movesPicked; i < numOfMoves; i++)
           {
@@ -305,7 +321,7 @@ Move MovePicker::pick_move_from_list() {
                   badCaptures[numOfBadCaptures++] = moves[i];
                   moves[i--] = moves[--numOfMoves];
                }
-               else if (moves[i].score > bestScore)
+               else if (moves[i].score > bestScore) // FIXME >= 0 ??
                {
                    bestIndex = i;
                    bestScore = moves[i].score;
@@ -332,18 +348,7 @@ Move MovePicker::pick_move_from_list() {
           // the entire move list for the best move.  If many moves have already
           // been searched and it is not a PV node, we are probably failing low
           // anyway, so we just pick the first move from the list.
-          if (pvNode || movesPicked < 12)
-          {
-              bestScore = -10000000;
-              bestIndex = -1;
-              for (int i = movesPicked; i < numOfMoves; i++)
-                  if(moves[i].score > bestScore)
-                  {
-                      bestIndex = i;
-                      bestScore = moves[i].score;
-                  }
-          } else
-              bestIndex = movesPicked;
+          bestIndex = (pvNode || movesPicked < 12 ? find_best_index() : movesPicked);
 
           if (bestIndex != -1)
           {
@@ -362,14 +367,7 @@ Move MovePicker::pick_move_from_list() {
       assert(movesPicked >= 0);
       while (movesPicked < numOfMoves)
       {
-          bestScore = -10000000;
-          bestIndex = -1;
-          for (int i = movesPicked; i < numOfMoves; i++)
-              if (moves[i].score > bestScore)
-              {
-                  bestIndex = i;
-                  bestScore = moves[i].score;
-              }
+          bestIndex = find_best_index();
 
           if (bestIndex != -1)
           {
@@ -400,18 +398,8 @@ Move MovePicker::pick_move_from_list() {
       assert(movesPicked >= 0);
       while (movesPicked < numOfMoves)
       {
-          bestScore = -10000000;
-          if (movesPicked < 4) // FIXME makes sens to score qcaps?
-          {
-              bestIndex = -1;
-              for (int i = movesPicked; i < numOfMoves; i++)
-                  if(moves[i].score > bestScore)
-                  {
-                      bestIndex = i;
-                      bestScore = moves[i].score;
-                  }
-          } else
-              bestIndex = movesPicked;
+          // FIXME makes sens to score qcaps?
+          bestIndex = (movesPicked < 4 ? find_best_index() : movesPicked);
 
           if (bestIndex != -1)
           {
index 839d1bd2908ee54f81a9d06bf2450a52b6812a74..af34711df40e15e6892b748ff9e1cf9409d91c08 100644 (file)
@@ -75,6 +75,7 @@ private:
   void score_evasions();
   void score_qcaptures();
   Move pick_move_from_list();
+  int find_best_index();
   
   const Position& pos;
   Move ttMove, mateKiller, killer1, killer2;