#pragma once /* MOUNT CONTROL COMPONENTS LIBRARY */ /* PROHIBITED ZONE CONTAINER UTILITIES */ #include "mcc_generics.h" namespace mcc { template void MccPZoneContainerForEach(std::ranges::output_range auto const& input_range, FuncT&& func) requires requires(std::remove_cvref_t f, T v) { [](std::remove_cvref_t ff, T vv) { ff(vv); }(f, v); } { for (auto const& el : input_range) { std::forward(func)(el); } } template auto MccPZoneContainerTimeStat(const T& durations, traits::mcc_time_duration_c auto* min_time, traits::mcc_time_duration_c auto* max_time) requires traits::mcc_output_duration_range_c { if (min_time == nullptr && max_time == nullptr) { return; } using min_t = std::decay_t; using max_t = std::decay_t; using duration_t = std::ranges::range_value_t; duration_t mint = duration_t::max(); duration_t maxt = duration_t::min(); MccPZoneContainerForEach(durations, [&mint, maxt](auto const& d) { if (d < mint) { mint = d; } if (d > maxt) { maxt = d; } }); if (min_time != nullptr) { *min_time = std::chrono::duration_cast(mint); } if (max_time != nullptr) { *max_time = std::chrono::duration_cast(maxt); } } template auto MccPZoneContainerIntersectStat(std::ranges::output_range auto const& points, mcc_celestial_point_c auto* first) { } } // namespace mcc