...
This commit is contained in:
@@ -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)>{});
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user