This commit is contained in:
2025-08-06 02:06:20 +03:00
parent 138e4bf84d
commit 6315d5e18e
15 changed files with 630 additions and 152 deletions

View File

@@ -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>;