- case GOOD_CAPTURES: case QCAPTURES_1: case QCAPTURES_2:
- case PROBCUT_CAPTURES: case RECAPTURES:
- endMoves = generate<CAPTURES>(pos, moves);
- score<CAPTURES>();
- break;
-
- case KILLERS:
- cur = killers;
- endMoves = cur + 2;
-
- killers[0] = ss->killers[0];
- killers[1] = ss->killers[1];
- killers[2].move = MOVE_NONE;
-
- // Be sure countermoves are different from killers
- if ( countermove != killers[0]
- && countermove != killers[1])
- *endMoves++ = countermove;
- break;
-
- case GOOD_QUIETS:
- endQuiets = endMoves = generate<QUIETS>(pos, moves);
- score<QUIETS>();
- endMoves = std::partition(cur, endMoves, [](const ExtMove& m) { return m.value > VALUE_ZERO; });
- insertion_sort(cur, endMoves);
- break;
-
- case BAD_QUIETS:
- cur = endMoves;
- endMoves = endQuiets;
- if (depth >= 3 * ONE_PLY)
- insertion_sort(cur, endMoves);
- break;
-
- case BAD_CAPTURES:
- // Just pick them in reverse order to get MVV/LVA ordering
- cur = moves + MAX_MOVES - 1;