...
This commit is contained in:
@@ -150,6 +150,55 @@ concept mcc_julday_c = mcc_fp_type_like_c<T> && requires(const T v) {
|
||||
};
|
||||
|
||||
|
||||
/* CELESTIAL COORDINATES EPOCH CLASS CONCEPT */
|
||||
|
||||
struct mcc_coord_epoch_interface_t {
|
||||
static constexpr double MJD0 = 2400000.5;
|
||||
|
||||
template <std::derived_from<mcc_coord_epoch_interface_t> SelfT, traits::mcc_input_char_range IR>
|
||||
bool fromCharRange(this SelfT&& self, IR&& str)
|
||||
{
|
||||
return std::forward<decltype(self)>(self).fromCharRange(std::forward<IR>(str));
|
||||
}
|
||||
|
||||
template <std::derived_from<mcc_coord_epoch_interface_t> SelfT, typename ClockT, typename DurT>
|
||||
bool fromTimePoint(this SelfT&& self, std::chrono::time_point<ClockT, DurT>&& tp)
|
||||
{
|
||||
return std::forward<decltype(self)>(self).fromTimePoint(std::forward<decltype(tp)>(tp));
|
||||
}
|
||||
|
||||
template <std::derived_from<mcc_coord_epoch_interface_t> SelfT, typename VT>
|
||||
bool fromMJD(this SelfT&& self, VT&& mjd)
|
||||
requires std::is_arithmetic_v<VT>
|
||||
{
|
||||
return std::forward<decltype(self)>(self).fromMJD(std::forward<VT>(mjd));
|
||||
}
|
||||
|
||||
template <std::derived_from<mcc_coord_epoch_interface_t> SelfT, traits::mcc_time_duration_c DT>
|
||||
SelfT& operator+=(this SelfT& self, DT&& dt)
|
||||
{
|
||||
return std::forward<decltype(self)>(self).operator+=(std::forward<DT>(dt));
|
||||
}
|
||||
|
||||
template <std::derived_from<mcc_coord_epoch_interface_t> SelfT, traits::mcc_time_duration_c DT>
|
||||
SelfT& operator-=(this SelfT& self, DT&& dt)
|
||||
{
|
||||
return std::forward<decltype(self)>(self).operator-=(std::forward<DT>(dt));
|
||||
}
|
||||
};
|
||||
|
||||
template <typename T>
|
||||
concept mcc_coord_epoch_c = std::derived_from<T, mcc_coord_epoch_interface_t> && requires(T t1, T t2, const T t_const) {
|
||||
{ t_const.MJD() } -> std::convertible_to<double>;
|
||||
{ t_const.UTC() } -> traits::mcc_systime_c;
|
||||
{ t_const.JEpoch() } -> traits::mcc_output_char_range;
|
||||
|
||||
{ t1 <=> t2 };
|
||||
|
||||
{ T::now() } -> std::same_as<T>;
|
||||
};
|
||||
|
||||
|
||||
/* ERROR CLASS CONCEPT */
|
||||
|
||||
template <typename T>
|
||||
|
||||
Reference in New Issue
Block a user