migrate to std::ranges

Move the various seq_ functions, as well as std::(stable_)sort,
std::accumulate, std::transform, std::find, std::find_if to their C++20
std::ranges counterparts.
This commit is contained in:
Dirk-Jan C. Binnema
2026-07-24 21:28:58 +03:00
committed by Seth Ladygo
parent 1b42ad6099
commit 4489d513be
29 changed files with 71 additions and 131 deletions

View File

@ -656,56 +656,6 @@ inline std::string shell_quote(const std::string& str) {
std::string to_lexnum(int64_t val);
int64_t from_lexnum(const std::string& str);
/**
* Like std::find_if, but using sequence instead of a range.
*
* @param seq some std::find_if compatible sequence
* @param pred a predicate
*
* @return an iterator
*/
template<typename Sequence, typename UnaryPredicate>
typename Sequence::const_iterator seq_find_if(const Sequence& seq, UnaryPredicate pred) {
return std::find_if(seq.cbegin(), seq.cend(), pred);
}
/**
* Is pred(element) true for at least one element of sequence?
*
* @param seq sequence
* @param pred a predicate
*
* @return true or false
*/
template<typename Sequence, typename UnaryPredicate>
bool seq_some(const Sequence& seq, UnaryPredicate pred) {
return seq_find_if(seq, pred) != seq.cend();
}
/**
* Create a sequence that has all element of seq for which pred is false
*
* @param seq sequence
* @param pred false
*
* @return sequence
*/
template<typename Sequence, typename UnaryPredicate>
Sequence seq_remove(const Sequence& seq, UnaryPredicate pred) {
Sequence res;
std::remove_copy_if(seq.begin(), seq.end(), std::back_inserter(res), pred);
return res;
}
template<typename Sequence, typename Compare>
void seq_sort(Sequence& seq, Compare cmp) { std::sort(seq.begin(), seq.end(), cmp); }
template<typename Sequence, typename UnaryOp>
void seq_for_each(const Sequence& seq, UnaryOp op) {
std::for_each(seq.cbegin(), seq.cend(), op);
}
struct MaybeAnsi {
explicit MaybeAnsi(bool use_color) : color_{use_color} {}