...
This commit is contained in:
@@ -184,6 +184,14 @@ concept mcc_mount_pec_c = requires(T t, const T t_const) {
|
||||
typename T::coord_t;
|
||||
typename T::pec_data_t;
|
||||
|
||||
// the 'T' class must contain static constexpr member of 'MccMountType' type
|
||||
requires requires {
|
||||
requires std::same_as<decltype(T::mountType), const MccMountType>;
|
||||
[]() {
|
||||
static constexpr MccMountType val = T::mountType;
|
||||
}(); // to ensure 'mountType' can be used in compile-time context
|
||||
};
|
||||
|
||||
// a class that contains at least .dx and .dy public fields
|
||||
requires requires(typename T::pec_result_t res) {
|
||||
requires std::same_as<decltype(res.dx), typename T::coord_t>;
|
||||
@@ -202,25 +210,65 @@ concept mcc_mount_pec_c = requires(T t, const T t_const) {
|
||||
|
||||
/* MOUNT STATE TELEMETRY */
|
||||
|
||||
// a class that contains at least celestial (equatorial and horizontal) coordinates
|
||||
template <typename T>
|
||||
concept mcc_mount_telemetry_data_c = requires(T telemetry) {
|
||||
typename T::coord_t;
|
||||
requires std::same_as<decltype(telemetry.mntRA), typename T::coord_t>; // apparent RA
|
||||
requires std::same_as<decltype(telemetry.mntDEC), typename T::coord_t>; // apparent DEC
|
||||
requires std::same_as<decltype(telemetry.mntHA), typename T::coord_t>; // hour angle
|
||||
requires std::same_as<decltype(telemetry.mntAZ), typename T::coord_t>; // azimuth
|
||||
requires std::same_as<decltype(telemetry.mntALT), typename T::coord_t>; // altitude
|
||||
};
|
||||
|
||||
|
||||
template <typename T>
|
||||
concept mcc_mount_telemetry_c = requires(T t, const T t_const) {
|
||||
typename T::error_t;
|
||||
|
||||
// a class that at least contains celestial (equatorial and horizontal) coordinates
|
||||
requires requires(typename T::mount_telemetry_data_t telemetry) {
|
||||
typename T::mount_telemetry_data_t::coord_t;
|
||||
requires std::same_as<decltype(telemetry.mntRA), typename T::mount_telemetry_data_t::coord_t>; // apparent RA
|
||||
requires std::same_as<decltype(telemetry.mntDEC), typename T::mount_telemetry_data_t::coord_t>; // apparent DEC
|
||||
requires std::same_as<decltype(telemetry.mntHA), typename T::mount_telemetry_data_t::coord_t>; // hour angle
|
||||
requires std::same_as<decltype(telemetry.mntAZ), typename T::mount_telemetry_data_t::coord_t>; // azimuth
|
||||
requires std::same_as<decltype(telemetry.mntALT), typename T::mount_telemetry_data_t::coord_t>; // altitude
|
||||
};
|
||||
// // a class that at least contains celestial (equatorial and horizontal) coordinates
|
||||
// requires requires(typename T::mount_telemetry_data_t telemetry) {
|
||||
// typename T::mount_telemetry_data_t::coord_t;
|
||||
// requires std::same_as<decltype(telemetry.mntRA), typename T::mount_telemetry_data_t::coord_t>; // apparent
|
||||
// RA requires std::same_as<decltype(telemetry.mntDEC), typename T::mount_telemetry_data_t::coord_t>; //
|
||||
// apparent DEC requires std::same_as<decltype(telemetry.mntHA), typename T::mount_telemetry_data_t::coord_t>;
|
||||
// // hour angle requires std::same_as<decltype(telemetry.mntAZ), typename T::mount_telemetry_data_t::coord_t>;
|
||||
// // azimuth requires std::same_as<decltype(telemetry.mntALT), typename T::mount_telemetry_data_t::coord_t>; //
|
||||
// altitude
|
||||
// };
|
||||
|
||||
requires mcc_mount_telemetry_data_c<typename T::mount_telemetry_data_t>;
|
||||
|
||||
{ t_const.errorString(std::declval<typename T::error_t>()) } -> mcc_formattable;
|
||||
|
||||
{ t.update() } -> std::same_as<typename T::error_t>;
|
||||
|
||||
{ t.data() } -> std::same_as<typename T::mount_telemetry_data_t>;
|
||||
{ t.data(std::declval<typename T::mount_telemetry_data_t&>()) } -> std::same_as<typename T::error_t>;
|
||||
};
|
||||
|
||||
|
||||
|
||||
/* SLEW PARAMETERS */
|
||||
|
||||
template <typename T>
|
||||
concept mcc_slew_params_c = std::movable<T> && requires(T t) {
|
||||
// input coordinates pair type (e.g. IRCS RA,DEC, Az,Alt and so on)
|
||||
requires std::same_as<decltype(t.coordPairKind), MccCoordPairKind>;
|
||||
|
||||
typename T::coord_t;
|
||||
|
||||
// co-longitude (e.g. RA or Az)
|
||||
requires std::same_as<decltype(t.x), typename T::coord_t>;
|
||||
|
||||
// co-latitude (e.g. DEC or ZD)
|
||||
requires std::same_as<decltype(t.y), typename T::coord_t>;
|
||||
|
||||
// stop after slewing
|
||||
requires std::convertible_to<decltype(t.stop), bool>;
|
||||
|
||||
requires requires(typename T::slew_model_t t) {
|
||||
{ t.slew(std::declval<typename T::coord_t>(), std::declval<typename T::coord_t>()) };
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
@@ -265,6 +313,12 @@ concept mcc_prohibited_zone_c = std::movable<T> && requires(T t, const T t_const
|
||||
t.timeFrom(std::declval<typename T::coord_t>(), std::declval<typename T::coord_t>(),
|
||||
std::declval<typename T::time_point_t>())
|
||||
} -> mcc_time_duration_c;
|
||||
|
||||
// requires for the methods above with the first argument of type 'const
|
||||
// mcc_mount_telemetry_c::mcc_mount_telemetry_data_t&' (const lvalue reference)
|
||||
//
|
||||
// something like this:
|
||||
requires mcc_mount_telemetry_data_c<mcc_func_arg1_t<decltype(T::inZone)>>;
|
||||
};
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user