This commit is contained in:
2025-07-31 22:47:26 +03:00
parent 9fbd858086
commit 750d29ceb9
8 changed files with 240 additions and 415 deletions

View File

@@ -27,39 +27,21 @@ static_assert(traits::mcc_celestial_point_c<MccCelestialPoint>, "MccCelestialPoi
/* CHECK FOR CURRENT MOUNT POSITION IN PROHIBITED ZONES */
/*
* WARNING: if an error occured during telemetry data request
* result 'in zone' flags cannot be interpretated correctly!
*/
template <traits::mcc_mount_telemetry_c TelemetryT,
traits::mcc_prohibited_zone_c<typename TelemetryT::mount_telemetry_data_t>... ZTs>
auto mccCheckInZonePZTuple(TelemetryT& telemetry,
std::tuple<ZTs...>& tuple_zones,
template <traits::mcc_mount_telemetry_data_c TelemetryDataT, traits::mcc_prohibited_zone_c<TelemetryDataT>... ZTs>
auto mccCheckInZonePZTuple(const TelemetryDataT& telemetry_data,
const std::tuple<ZTs...>& tuple_zones,
std::array<bool, sizeof...(ZTs)>& in_zone)
{
const auto p_telemetry = &telemetry;
const auto p_tdata = &telemetry_data;
const auto p_tuple_zones = &tuple_zones;
const auto p_in_zone = &in_zone;
return [p_telemetry, p_tuple_zones, p_in_zone]<size_t... Is>(std::index_sequence<Is...>) {
typename TelemetryT::error_t t_err;
(
[&t_err]() {
if constexpr (Is) {
if (t_err) {
(*p_in_zone)[Is] = false;
return;
}
}
[p_tdata, p_tuple_zones, p_in_zone]<size_t... Is>(std::index_sequence<Is...>) {
(((*p_in_zone)[Is] = std::get<Is>(*p_tuple_zones).inZone(*p_tdata)), ...);
}(std::make_index_sequence<sizeof...(ZTs)>{});
typename TelemetryT::mount_telemetry_data_t tdata;
t_err = p_telemetry->data(tdata);
if (!t_err) {
(*p_in_zone)[Is] = std::get<Is>(p_tuple_zones).inZone(tdata);
}
}(),
...);
return [p_in_zone]<size_t... Is>(std::index_sequence<Is...>) {
return ((*p_in_zone)[Is] || ...);
}(std::make_index_sequence<sizeof...(ZTs)>{});
}