- ExtMove* goodQuiet = std::partition(cur, endMoves, [](const ExtMove& m)
- { return m.value > VALUE_ZERO; });
- insertion_sort(cur, goodQuiet);
- } else
- insertion_sort(cur, endMoves);
- break;
-
- case BAD_CAPTURES:
- // Just pick them in reverse order to get correct ordering
- cur = moves + MAX_MOVES - 1;
- endMoves = endBadCaptures;
- break;
-
- case ALL_EVASIONS:
- endMoves = generate<EVASIONS>(pos, moves);
- if (endMoves - moves > 1)
- score<EVASIONS>();
- break;
-
- case CHECKS:
- endMoves = generate<QUIET_CHECKS>(pos, moves);
- break;
-
- case EVASION: case QSEARCH_WITH_CHECKS: case QSEARCH_WITHOUT_CHECKS:
- case PROBCUT: case RECAPTURE: case STOP:
- stage = STOP;
- break;
-
- default:
- assert(false);
- }
-}
-
-int MovePicker::see_sign() const
-{
- return stage == GOOD_CAPTURES ? 1
- : stage == BAD_CAPTURES ? -1 : 0;
+ if (pos.capture(m))
+ m.value = PieceValue[MG][pos.piece_on(to_sq(m))]
+ - Value(type_of(pos.moved_piece(m)));
+ else
+ m.value = (*mainHistory)[pos.side_to_move()][from_to(m)] - (1 << 28);
+ }