]> git.sesse.net Git - stockfish/blobdiff - src/movepick.cpp
Use pointers instead of array indices also for badCaptures
[stockfish] / src / movepick.cpp
index 7120ba0c37feeffb4c83bbde8a9aca0c2c26b3aa..dedfee8a4baf6f809bd59313bd826a51314e8360 100644 (file)
@@ -61,17 +61,19 @@ namespace {
 
 MovePicker::MovePicker(const Position& p, Move ttm, Depth d,
                        const History& h, SearchStack* ss) : pos(p), H(h) {
+  int searchTT = ttm;
   ttMoves[0].move = ttm;
   if (ss)
   {
       ttMoves[1].move = (ss->mateKiller == ttm)? MOVE_NONE : ss->mateKiller;
+      searchTT |= ttMoves[1].move;
       killers[0].move = ss->killers[0];
       killers[1].move = ss->killers[1];
   } else
       ttMoves[1].move = killers[0].move = killers[1].move = MOVE_NONE;
 
   finished = false;
-  numOfBadCaptures = 0;
+  lastBadCapture = badCaptures;
 
   Color us = pos.side_to_move();
 
@@ -81,11 +83,11 @@ MovePicker::MovePicker(const Position& p, Move ttm, Depth d,
   if (p.is_check())
       phasePtr = EvasionsPhaseTable;
   else if (d > Depth(0))
-      phasePtr = MainSearchPhaseTable;
+      phasePtr = MainSearchPhaseTable + !searchTT;
   else if (d == Depth(0))
-      phasePtr = QsearchWithChecksPhaseTable;
+      phasePtr = QsearchWithChecksPhaseTable + !searchTT;
   else
-      phasePtr = QsearchWithoutChecksPhaseTable;
+      phasePtr = QsearchWithoutChecksPhaseTable + !searchTT;
 
   phasePtr--;
   go_next_phase();
@@ -127,7 +129,7 @@ void MovePicker::go_next_phase() {
       // Bad captures SEE value is already calculated so just sort them
       // to get SEE move ordering.
       curMove = badCaptures;
-      lastMove = badCaptures + numOfBadCaptures;
+      lastMove = lastBadCapture;
       std::sort(badCaptures, lastMove);
       return;
 
@@ -276,9 +278,10 @@ Move MovePicker::get_next_move() {
 
                   // Losing capture, move it to the badCaptures[] array, note
                   // that move has now been already checked for legality.
-                  assert(numOfBadCaptures < 63);
-                  badCaptures[numOfBadCaptures].move = move;
-                  badCaptures[numOfBadCaptures++].score = seeValue;
+                  assert(int(lastBadCapture - badCaptures) < 63);
+                  lastBadCapture->move = move;
+                  lastBadCapture->score = seeValue;
+                  lastBadCapture++;
               }
               break;