refactor(contextual_option): use any_of to implement predicate check

This commit is contained in:
Marcus Holland-Moritz 2025-03-16 09:25:24 +01:00
parent 2e4f6d2208
commit 39d2b53fba

View File

@ -21,6 +21,7 @@
#pragma once #pragma once
#include <algorithm>
#include <iosfwd> #include <iosfwd>
#include <optional> #include <optional>
#include <span> #include <span>
@ -91,18 +92,17 @@ class contextual_option {
template <typename T> template <typename T>
bool any_is(T&& pred) const { bool any_is(T&& pred) const {
for (auto e : contextual_) { auto&& p = std::forward<T>(pred);
if (pred(e.second)) { return std::ranges::any_of(contextual_, p,
return true; &decltype(contextual_)::value_type::second) ||
} (default_ && p(*default_));
}
return default_ && pred(*default_);
} }
template <typename T> template <typename T>
void visit_contextual(T&& visitor) const { void visit_contextual(T&& visitor) const {
auto&& v = std::forward<T>(visitor);
for (auto const& [ctx, val] : contextual_) { for (auto const& [ctx, val] : contextual_) {
visitor(ctx, val); v(ctx, val);
} }
} }