diff --git a/include/ircd/json/tuple/for_each.h b/include/ircd/json/tuple/for_each.h index 7ec6773f8..f0ec4c8ce 100644 --- a/include/ircd/json/tuple/for_each.h +++ b/include/ircd/json/tuple/for_each.h @@ -14,66 +14,30 @@ namespace ircd { namespace json { -template inline enable_if_tuple for_each(const tuple &t, function&& f) { - if constexpr(i < size()) + return util::for_each(t, [&f] + (const auto &prop) { - using closure_result = std::invoke_result_t - < - decltype(f), decltype(key(t)), decltype(val(t)) - >; - - constexpr bool terminable - { - std::is_same() - }; - - if constexpr(terminable) - { - if(!f(key(t), val(t))) - return false; - } - else f(key(t), val(t)); - - return for_each(t, std::forward(f)); - } - else return true; + return f(prop.key, prop.value); + }); } -template inline enable_if_tuple for_each(tuple &t, function&& f) { - if constexpr(i < size()) + return util::for_each(t, [&f] + (auto &prop) { - using closure_result = std::invoke_result_t - < - decltype(f), decltype(key(t)), decltype(val(t)) - >; - - constexpr bool terminable - { - std::is_same() - }; - - if constexpr(terminable) - { - if(!f(key(t), val(t))) - return false; - } - else f(key(t), val(t)); - - return for_each(t, std::forward(f)); - } - else return true; + return f(prop.key, prop.value); + }); } template rfor_each(const tuple &t, function&& f) { - if constexpr(i >= 0) + return util::rfor_each(t, [&f] + (const auto &prop) { - using closure_result = std::invoke_result_t - < - decltype(f), decltype(key(t)), decltype(val(t)) - >; - - constexpr bool terminable - { - std::is_same() - }; - - if constexpr(terminable) - { - if(!f(key(t), val(t))) - return false; - } - else f(key(t), val(t)); - - return rfor_each(t, std::forward(f)); - } - else return true; + return f(prop.key, prop.value); + }); } template rfor_each(tuple &t, function&& f) { - if constexpr(i >= 0) + return util::rfor_each(t, [&f] + (auto &prop) { - using closure_result = std::invoke_result_t - < - decltype(f), decltype(key(t)), decltype(val(t)) - >; - - constexpr bool terminable - { - std::is_same() - }; - - if constexpr(terminable) - { - if(!f(key(t), val(t))) - return false; - } - else f(key(t), val(t)); - - return rfor_each(t, std::forward(f)); - } - else return true; + return f(prop.key, prop.value); + }); } } // namespace json