Skip to content

File frame_concepts.hpp

File List > astrea > astro > astro > frames > frame_concepts.hpp

Go to the documentation of this file

#pragma once

#include <concepts>

#include <astro/astro.fwd.hpp>

namespace astrea {
namespace astro {

template <typename Frame_T>
concept IsInertialFrame = (Frame_T::get_axis() == FrameAxis::ICRF || Frame_T::get_axis() == FrameAxis::J2000);

template <typename Frame_T>
concept IsBodyFixedFrame = (Frame_T::get_axis() == FrameAxis::BODY_FIXED);

template <typename Frame_T>
concept IsStaticFrame =
    (Frame_T::get_axis() == FrameAxis::ICRF || Frame_T::get_axis() == FrameAxis::J2000 || Frame_T::get_axis() == FrameAxis::BODY_FIXED);

template <typename Frame_T>
concept IsDynamicFrame =
    (Frame_T::get_axis() == FrameAxis::LVLH || Frame_T::get_axis() == FrameAxis::RIC || Frame_T::get_axis() == FrameAxis::VNB);

template <typename Frame_T, typename Frame_U>
concept HasSameOrigin = (Frame_T::get_origin() == Frame_U::get_origin());

template <typename Frame_T, typename Frame_U>
concept HasSameAxis = (Frame_T::get_axis() == Frame_U::get_axis());

template <typename Frame_T, typename Frame_U>
concept IsSameFrame = HasSameOrigin<Frame_T, Frame_U> && HasSameAxis<Frame_T, Frame_U>;

template <typename Frame_T, typename Frame_U>
concept HasDcm = requires(const Date& date) { get_dcm<Frame_T, Frame_U>(date); };

template <typename Frame_T, typename Frame_U>
concept HasDcmMethod =
    requires(const Frame_T& frame, const Date& date) { frame.template get_dcm<Frame_T, Frame_U>(date); };

} // namespace astro
} // namespace astrea