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