- moves[moveNum].pv[j] = MOVE_NONE;
- }
-
-
- // RootMoveList::sort() sorts the root move list at the beginning of a new
- // iteration.
-
- void RootMoveList::sort() {
-
- sort_multipv(count - 1); // Sort all items
- }
-
-
- // RootMoveList::sort_multipv() sorts the first few moves in the root move
- // list by their scores and depths. It is used to order the different PVs
- // correctly in MultiPV mode.
-
- void RootMoveList::sort_multipv(int n) {
-
- int i,j;
-
- for (i = 1; i <= n; i++)
- {
- RootMove rm = moves[i];
- for (j = i; j > 0 && moves[j - 1] < rm; j--)
- moves[j] = moves[j - 1];
-
- moves[j] = rm;
- }
- }
-
-
- // init_node() is called at the beginning of all the search functions
- // (search(), search_pv(), qsearch(), and so on) and initializes the
- // search stack object corresponding to the current node. Once every
- // NodesBetweenPolls nodes, init_node() also calls poll(), which polls
- // for user input and checks whether it is time to stop the search.
-
- void init_node(SearchStack ss[], int ply, int threadID) {
-
- assert(ply >= 0 && ply < PLY_MAX);
- assert(threadID >= 0 && threadID < ActiveThreads);
-
- Threads[threadID].nodes++;
-
- if (threadID == 0)
- {
- NodesSincePoll++;
- if (NodesSincePoll >= NodesBetweenPolls)
- {
- poll();
- NodesSincePoll = 0;
- }
- }
- ss[ply].init(ply);
- ss[ply + 2].initKillers();
-
- if (Threads[threadID].printCurrentLine)
- print_current_line(ss, ply, threadID);
- }
-
-
- // update_pv() is called whenever a search returns a value > alpha.
- // It updates the PV in the SearchStack object corresponding to the
- // current node.
-
- void update_pv(SearchStack ss[], int ply) {
-
- assert(ply >= 0 && ply < PLY_MAX);
-
- int p;
-
- ss[ply].pv[ply] = ss[ply].currentMove;
-
- for (p = ply + 1; ss[ply + 1].pv[p] != MOVE_NONE; p++)
- ss[ply].pv[p] = ss[ply + 1].pv[p];
-
- ss[ply].pv[p] = MOVE_NONE;
- }
-
-
- // sp_update_pv() is a variant of update_pv for use at split points. The
- // difference between the two functions is that sp_update_pv also updates
- // the PV at the parent node.
-
- void sp_update_pv(SearchStack* pss, SearchStack ss[], int ply) {
-
- assert(ply >= 0 && ply < PLY_MAX);
-
- int p;
-
- ss[ply].pv[ply] = pss[ply].pv[ply] = ss[ply].currentMove;
-
- for (p = ply + 1; ss[ply + 1].pv[p] != MOVE_NONE; p++)
- ss[ply].pv[p] = pss[ply].pv[p] = ss[ply + 1].pv[p];
-
- ss[ply].pv[p] = pss[ply].pv[p] = MOVE_NONE;