Skip to content

Commit

Permalink
refactor: make namespace ranges mostly an alias of std::ranges
Browse files Browse the repository at this point in the history
  • Loading branch information
kwvg committed Nov 2, 2024
1 parent 4717fe8 commit 0577b4d
Showing 1 changed file with 9 additions and 29 deletions.
38 changes: 9 additions & 29 deletions src/util/ranges.h
Original file line number Diff line number Diff line change
Expand Up @@ -5,40 +5,20 @@
#ifndef BITCOIN_UTIL_RANGES_H
#define BITCOIN_UTIL_RANGES_H

#include <algorithm>
#include <ranges>
#include <optional>

//#if __cplusplus > 201703L // C++20 compiler
//namespace ranges = std::ranges;
//#else

#define MK_RANGE(FUN) \
template <typename X, typename Z> \
inline auto FUN(const X& ds, const Z& fn) { \
return std::FUN(cbegin(ds), cend(ds), fn); \
} \
template <typename X, typename Z> \
inline auto FUN(X& ds, const Z& fn) { \
return std::FUN(begin(ds), end(ds), fn); \
}


namespace ranges {
MK_RANGE(all_of)
MK_RANGE(any_of)
MK_RANGE(count_if)
MK_RANGE(find_if)
using namespace std::ranges;

template <typename X, typename Z>
constexpr inline auto find_if_opt(const X& ds, const Z& fn) {
const auto it = ranges::find_if(ds, fn);
if (it != end(ds)) {
return std::make_optional(*it);
}
return std::optional<std::decay_t<decltype(*it)>>{};
template <typename X, typename Z>
constexpr inline auto find_if_opt(const X& ds, const Z& fn) {
const auto it = std::ranges::find_if(ds, fn);
if (it != std::end(ds)) {
return std::make_optional(*it);
}

return std::optional<std::decay_t<decltype(*it)>>{};
}
}

//#endif // C++20 compiler
#endif // BITCOIN_UTIL_RANGES_H

0 comments on commit 0577b4d

Please sign in to comment.