This commit is contained in:
Timur A. Fatkhullin 2025-07-22 00:07:03 +03:00
parent 2faa3f0aca
commit 85e99151a8

View File

@ -294,16 +294,24 @@ concept mcc_slew_params_c = std::movable<T> && requires(T t) {
/* GENERIC SLEW AND GUIDING MODEL */
template <typename T, typename TelemetryT>
concept mcc_slew_model_c = mcc_mount_telemetry_c<TelemetryT> && requires(T t) {
template <typename T>
concept mcc_slew_model_c = requires(T t) {
requires mcc_error_c<typename T::error_t>;
requires mcc_slew_params_c<typename T::slew_params_t>;
{
t.slew(std::declval<typename T::slew_params_t>(), std::declval<TelemetryT&>())
} -> std::same_as<typename T::error_t>;
{ t.slew(std::declval<typename T::slew_params_t>()) } -> std::same_as<typename T::error_t>;
};
// template <typename T, typename TelemetryT>
// concept mcc_slew_model_c = mcc_mount_telemetry_c<TelemetryT> && requires(T t) {
// requires mcc_error_c<typename T::error_t>;
// requires mcc_slew_params_c<typename T::slew_params_t>;
// {
// t.slew(std::declval<typename T::slew_params_t>(), std::declval<TelemetryT&>())
// } -> std::same_as<typename T::error_t>;
// };
template <typename T, typename TelemetryT>
concept mcc_guiding_model_c = mcc_mount_telemetry_c<TelemetryT> && requires(T t) {
typename T::error_t;
@ -397,7 +405,8 @@ concept mcc_mount_controls_c = std::move_constructible<T> && std::movable<T> &&
requires mcc_mount_hardware_c<decltype(t.hardware)>;
requires mcc_mount_telemetry_c<decltype(t.telemetry)>;
requires mcc_slew_model_c<decltype(t.slewModel), decltype(t.telemetry)>;
requires mcc_slew_model_c<decltype(t.slewModel)>;
// requires mcc_slew_model_c<decltype(t.slewModel), decltype(t.telemetry)>;
requires mcc_guiding_model_c<decltype(t.guidingModel), decltype(t.telemetry)>;
// a std::tuple of prohibited zones
@ -421,7 +430,8 @@ 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, 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 std::same_as<typename T::slew_params_t, typename T::slew_model_t::slew_params_t>;