...
This commit is contained in:
@@ -297,7 +297,7 @@ concept mcc_mount_pec_c = requires(T t) {
|
||||
|
||||
// a class that contains at least celestial (equatorial and horizontal) and harware coordinates
|
||||
template <typename T>
|
||||
concept mcc_mount_telemetry_data_c = requires(T telemetry) {
|
||||
concept mcc_mount_telemetry_data_c = std::movable<T> && requires(T telemetry) {
|
||||
typename T::coord_t;
|
||||
typename T::time_point_t;
|
||||
|
||||
@@ -423,8 +423,8 @@ concept mcc_guiding_model_c = requires(T t) {
|
||||
template <typename T, typename TelemetryDataT>
|
||||
concept mcc_prohibited_zone_c =
|
||||
mcc_mount_telemetry_data_c<TelemetryDataT> && std::movable<T> && requires(T t, const T t_const) {
|
||||
typename T::coord_t;
|
||||
typename T::time_point_t;
|
||||
// typename T::coord_t;
|
||||
// typename T::time_point_t;
|
||||
requires mcc_time_duration_c<typename T::duration_t>;
|
||||
|
||||
// static constexpr member to represent inifite duration
|
||||
@@ -436,6 +436,15 @@ concept mcc_prohibited_zone_c =
|
||||
};
|
||||
};
|
||||
|
||||
// static constexpr member to represent zero duration
|
||||
requires requires {
|
||||
requires std::same_as<decltype(T::zeroDuration), typename T::duration_t>;
|
||||
[]() {
|
||||
constexpr auto val = T::zeroDuration;
|
||||
return val;
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
// the type 'T' must define a static constexpr member of type MccCoordPairKind
|
||||
// to declarate type of coordinate pair used to describe the zone.
|
||||
@@ -491,6 +500,11 @@ concept mcc_prohibited_zone_c =
|
||||
{ t.timeFrom(std::declval<const TelemetryDataT&>()) } -> std::same_as<typename T::duration_t>;
|
||||
};
|
||||
|
||||
// an input range of prohibited zones
|
||||
template <typename T, typename TelemetryDataT>
|
||||
concept mcc_irange_of_pzones_c = mcc_mount_telemetry_data_c<TelemetryDataT> && std::ranges::input_range<T> &&
|
||||
mcc_prohibited_zone_c<std::ranges::range_value_t<T>, TelemetryDataT>;
|
||||
|
||||
|
||||
|
||||
/* MOUNT GENERIC CONTROLS */
|
||||
@@ -511,7 +525,9 @@ concept mcc_mount_controls_c = requires(T t) {
|
||||
// []<mcc_prohibited_zone_c<typename decltype(t.telemetry)::mount_telemetry_data_t>... Ts>(std::tuple<Ts...>) {
|
||||
// }(t.prohibitedZones);
|
||||
|
||||
requires mcc_tuple_c<decltype(t.prohibitedZones)>;
|
||||
// requires mcc_tuple_c<decltype(t.prohibitedZones)>;
|
||||
requires mcc_irange_of_pzones_c<decltype(t.prohibitedZones),
|
||||
typename decltype(t.telemetry)::mount_telemetry_data_t>;
|
||||
};
|
||||
|
||||
|
||||
@@ -530,18 +546,24 @@ concept mcc_mount_c = requires(T t) {
|
||||
requires mcc_astrom_engine_c<typename T::astrom_engine_t>;
|
||||
requires mcc_mount_pec_c<typename T::pec_t>;
|
||||
requires mcc_mount_hardware_c<typename T::hardware_t>;
|
||||
// requires mcc_slew_model_c<typename T::slew_model_t, typename T::mount_telemetry_t>;
|
||||
requires mcc_slew_model_c<typename T::slew_model_t>;
|
||||
// requires mcc_guiding_model_c<typename T::guiding_model_t, typename T::mount_telemetry_t>;
|
||||
requires mcc_guiding_model_c<typename T::guiding_model_t>;
|
||||
|
||||
// requires std::same_as<typename T::slew_params_t, typename T::slew_model_t::slew_params_t>;
|
||||
// public methods
|
||||
{
|
||||
t.mountTelemetryData(std::declval<typename T::mount_telemetry_data_t&>())
|
||||
} -> std::same_as<typename T::mount_telemetry_t::error_t>;
|
||||
|
||||
// public method
|
||||
{ t.mountTelemetryData() } -> std::same_as<typename T::mount_telemetry_data_t>;
|
||||
{
|
||||
t.slewMount(std::declval<typename T::slew_model_t::slew_point_t>())
|
||||
} -> std::same_as<typename T::slew_model_t::error_t>;
|
||||
|
||||
{
|
||||
t.guidingTarget(std::declval<typename T::guiding_model_t::guiding_point_t>())
|
||||
} -> std::same_as<typename T::guiding_model_t::error_t>;
|
||||
};
|
||||
|
||||
// generic with logging methods
|
||||
// generic with public logging methods
|
||||
template <typename T>
|
||||
concept mcc_log_mount_c = mcc_mount_c<T> && mcc_logger_c<T>;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user