This commit is contained in:
2025-07-04 18:21:03 +03:00
parent b3b275edd8
commit c9e9115ebc
4 changed files with 265 additions and 12 deletions

View File

@@ -7,6 +7,7 @@
#include <concepts>
#include <string>
// #include "mcc_traits.h"
@@ -14,11 +15,14 @@ namespace mcc::traits
{
template <typename T>
concept mcc_astrom_engine_c = requires(T t) {
concept mcc_astrom_engine_c = requires(T t, const T t_const) {
typename T::engine_err_t;
typename T::engine_state_t;
requires std::movable<typename T::engine_state_t>;
typename T::coord_t;
typename T::prop_motion_t;
typename T::parallax_t;
typename T::time_point_t;
typename T::juldate_t;
typename T::gst_t;
@@ -30,15 +34,20 @@ concept mcc_astrom_engine_c = requires(T t) {
{ t.updateState(std::declval<typename T::engine_state_t>()) };
{ t_const.getState() } -> std::same_as<typename T::engine_state_t>;
{ t_const.errorString(std::declval<typename T::engine_err_t>()) } -> std::convertible_to<std::string>;
/* coordinates conversional methods */
// ICRS RA and DEC to observed place: icrs2obs(ra, dec, jd, ra_app, dec_app, ha, az, alt, eo)
{
t.icrs2obs(std::declval<typename T::coord_t>(), std::declval<typename T::coord_t>(),
std::declval<typename T::juldate_t>(), std::declval<typename T::coord_t&>(),
std::declval<typename T::prop_motion_t>(), std::declval<typename T::prop_motion_t>(),
std::declval<typename T::parallax_t>(), std::declval<typename T::juldate_t>(),
std::declval<typename T::coord_t&>(), std::declval<typename T::coord_t&>(),
std::declval<typename T::coord_t&>(), std::declval<typename T::coord_t&>(),
std::declval<typename T::eo_t&>())
std::declval<typename T::coord_t&>(), std::declval<typename T::eo_t&>())
} -> std::same_as<typename T::engine_err_t>;
// compute hour angle and declination from azimuth and altitude: hadec2azalt(ha, dec, az, alt)
@@ -69,9 +78,10 @@ concept mcc_astrom_engine_c = requires(T t) {
// requires mcc_systime_c<mcc_func_arg1_t<decltype(&T::greg2jul)>>;
// requires mcc_output_arg_c<mcc_func_argN_t<decltype(&T::greg2jul), 2>, typename T::juldate_t>;
// apparent sideral time: apparentSiderTime(jd, gst)
// apparent sideral time: apparentSiderTime(jd, gst, islocal)
{
t.apparentSiderTime(std::declval<typename T::juldate_t&>(), std::declval<typename T::gst_t&>())
t.apparentSiderTime(std::declval<typename T::juldate_t>(), std::declval<typename T::gst_t&>(),
std::declval<bool>())
} -> std::same_as<typename T::engine_err_t>;