}
}
- // Unary predicate used by std::partition to split positive values from remaining
- // ones so as to sort the two sets separately, with the second sort delayed.
- inline bool has_positive_value(const ExtMove& move) { return move.value > VALUE_ZERO; }
-
// Picks the best move in the range (begin, end) and moves it to the front.
// It's faster than sorting all the moves in advance when there are few
// moves e.g. possible captures.
case QUIETS_1_S1:
endQuiets = end = generate<QUIETS>(pos, moves);
score<QUIETS>();
- end = std::partition(cur, end, has_positive_value);
+ end = std::partition(cur, end, [](const ExtMove& m) { return m.value > VALUE_ZERO; });
insertion_sort(cur, end);
return;
/// Position::flip() flips position with the white and black sides reversed. This
/// is only useful for debugging e.g. for finding evaluation symmetry bugs.
-static char toggle_case(char c) {
- return char(islower(c) ? toupper(c) : tolower(c));
-}
-
void Position::flip() {
string f, token;
ss >> token; // Castling availability
f += token + " ";
- std::transform(f.begin(), f.end(), f.begin(), toggle_case);
+ std::transform(f.begin(), f.end(), f.begin(),
+ [](char c) { return char(islower(c) ? toupper(c) : tolower(c)); });
ss >> token; // En passant square
f += (token == "-" ? token : token.replace(1, 1, token[1] == '3' ? "6" : "3"));
std::ostream& operator<<(std::ostream& os, const OptionsMap& om) {
for (size_t idx = 0; idx < om.size(); ++idx)
- for (auto it : om)
+ for (auto& it : om)
if (it.second.idx == idx)
{
const Option& o = it.second;