-/// MovePicker::init_phase_table() initializes the PhaseTable[],
-/// MainSearchPhaseIndex, EvasionPhaseIndex, QsearchWithChecksPhaseIndex
-/// and QsearchWithoutChecksPhaseIndex. It is only called once during
-/// program startup, and never again while the program is running.
-
-void MovePicker::init_phase_table() {
-
- int i = 0;
-
- // Main search
- MainSearchPhaseIndex = i - 1;
- PhaseTable[i++] = PH_TT_MOVE;
- PhaseTable[i++] = PH_MATE_KILLER;
- PhaseTable[i++] = PH_GOOD_CAPTURES;
- // PH_KILLER_1 and PH_KILLER_2 are not yet used.
- // PhaseTable[i++] = PH_KILLER_1;
- // PhaseTable[i++] = PH_KILLER_2;
- PhaseTable[i++] = PH_NONCAPTURES;
- PhaseTable[i++] = PH_BAD_CAPTURES;
- PhaseTable[i++] = PH_STOP;
-
- // Check evasions
- EvasionsPhaseIndex = i - 1;
- PhaseTable[i++] = PH_EVASIONS;
- PhaseTable[i++] = PH_STOP;
-
- // Quiescence search with checks
- QsearchWithChecksPhaseIndex = i - 1;
- PhaseTable[i++] = PH_TT_MOVE;
- PhaseTable[i++] = PH_QCAPTURES;
- PhaseTable[i++] = PH_QCHECKS;
- PhaseTable[i++] = PH_STOP;
-
- // Quiescence search without checks
- QsearchWithoutChecksPhaseIndex = i - 1;
- PhaseTable[i++] = PH_TT_MOVE;
- PhaseTable[i++] = PH_QCAPTURES;
- PhaseTable[i++] = PH_STOP;
-}
+/// Version of next_move() to use at split point nodes where the move is grabbed
+/// from the split point's shared MovePicker object. This function is not thread
+/// safe so should be lock protected by the caller.
+template<>
+Move MovePicker::next_move<true>() { return ss->sp->mp->next_move<false>(); }