siderust-cpp
Header-only C++ wrapper for siderust
Loading...
Searching...
No Matches
centers.hpp
Go to the documentation of this file.
1
#pragma once
2
13
#include "
ffi_core.hpp
"
14
15
namespace
siderust
{
16
17
// Forward declaration for Geodetic (defined in coordinates/geodetic.hpp)
18
struct
Geodetic;
19
20
namespace
centers {
21
22
// ============================================================================
23
// Center Trait
24
// ============================================================================
25
26
template
<
typename
C>
27
struct
CenterTraits
;
// primary — intentionally undefined
28
29
template
<
typename
C,
typename
=
void
>
30
struct
is_center
: std::false_type {};
31
32
template
<
typename
C>
33
struct
is_center
<C, std::void_t<decltype(CenterTraits<C>::ffi_id)>> : std::true_type {};
34
35
template
<
typename
C>
36
inline
constexpr
bool
is_center_v
=
is_center<C>::value
;
37
38
// ============================================================================
39
// Center Tag Definitions
40
// ============================================================================
41
43
struct
Barycentric
{};
45
struct
Heliocentric
{};
47
struct
Geocentric
{};
49
struct
Topocentric
{};
51
struct
Bodycentric
{};
52
53
// ============================================================================
54
// CenterTraits Specializations
55
// ============================================================================
56
58
struct
NoParams
{};
59
60
template
<>
61
struct
CenterTraits
<
Barycentric
> {
62
static
constexpr
siderust_center_t ffi_id = SIDERUST_CENTER_T_BARYCENTRIC;
63
using
Params
=
NoParams
;
64
static
constexpr
const
char
*
name
() {
return
"Barycentric"
; }
65
};
66
67
template
<>
68
struct
CenterTraits
<
Heliocentric
> {
69
static
constexpr
siderust_center_t ffi_id = SIDERUST_CENTER_T_HELIOCENTRIC;
70
using
Params
=
NoParams
;
71
static
constexpr
const
char
*
name
() {
return
"Heliocentric"
; }
72
};
73
74
template
<>
75
struct
CenterTraits
<
Geocentric
> {
76
static
constexpr
siderust_center_t ffi_id = SIDERUST_CENTER_T_GEOCENTRIC;
77
using
Params
=
NoParams
;
78
static
constexpr
const
char
*
name
() {
return
"Geocentric"
; }
79
};
80
81
template
<>
82
struct
CenterTraits
<
Topocentric
> {
83
static
constexpr
siderust_center_t ffi_id = SIDERUST_CENTER_T_TOPOCENTRIC;
84
using
Params
=
Geodetic
;
// forward-declared
85
static
constexpr
const
char
*
name
() {
return
"Topocentric"
; }
86
};
87
88
template
<>
89
struct
CenterTraits
<
Bodycentric
> {
90
static
constexpr
siderust_center_t ffi_id = SIDERUST_CENTER_T_BODYCENTRIC;
91
using
Params
=
NoParams
;
// placeholder for BodycentricParams
92
static
constexpr
const
char
*
name
() {
return
"Bodycentric"
; }
93
};
94
95
// ============================================================================
96
// Center-shift Valid Predicate
97
// ============================================================================
98
105
template
<
typename
From,
typename
To>
106
struct
has_center_transform
: std::false_type {};
107
108
template
<
typename
C>
109
struct
has_center_transform
<C, C> : std::true_type {};
110
111
#define SIDERUST_CENTER_TRANSFORM_PAIR(A, B) \
112
template <> \
113
struct has_center_transform<A, B> : std::true_type {}; \
114
template <> \
115
struct has_center_transform<B, A> : std::true_type {}
116
117
SIDERUST_CENTER_TRANSFORM_PAIR
(
Barycentric
,
Heliocentric
);
118
SIDERUST_CENTER_TRANSFORM_PAIR
(
Barycentric
,
Geocentric
);
119
SIDERUST_CENTER_TRANSFORM_PAIR
(
Heliocentric
,
Geocentric
);
120
121
#undef SIDERUST_CENTER_TRANSFORM_PAIR
122
123
template
<
typename
From,
typename
To>
124
inline
constexpr
bool
has_center_transform_v
=
has_center_transform<From, To>::value
;
125
126
}
// namespace centers
127
}
// namespace siderust
SIDERUST_CENTER_TRANSFORM_PAIR
#define SIDERUST_CENTER_TRANSFORM_PAIR(A, B)
Definition
centers.hpp:111
ffi_core.hpp
Error handling and utility base for the siderust C++ wrapper.
siderust::centers::is_center_v
constexpr bool is_center_v
Definition
centers.hpp:36
siderust::centers::has_center_transform_v
constexpr bool has_center_transform_v
Definition
centers.hpp:124
siderust
Definition
altitude.hpp:17
siderust::Geodetic
Geodetic position (WGS84 ellipsoid).
Definition
geodetic.hpp:28
siderust::centers::Barycentric
Solar-system barycenter (zero-cost, Params = void).
Definition
centers.hpp:43
siderust::centers::Bodycentric
Center of a body (Params = BodycentricParams).
Definition
centers.hpp:51
siderust::centers::CenterTraits< Barycentric >::name
static constexpr const char * name()
Definition
centers.hpp:64
siderust::centers::CenterTraits< Bodycentric >::name
static constexpr const char * name()
Definition
centers.hpp:92
siderust::centers::CenterTraits< Geocentric >::name
static constexpr const char * name()
Definition
centers.hpp:78
siderust::centers::CenterTraits< Heliocentric >::name
static constexpr const char * name()
Definition
centers.hpp:71
siderust::centers::CenterTraits< Topocentric >::name
static constexpr const char * name()
Definition
centers.hpp:85
siderust::centers::CenterTraits
Definition
centers.hpp:27
siderust::centers::Geocentric
Geocenter (zero-cost, Params = void).
Definition
centers.hpp:47
siderust::centers::Heliocentric
Heliocenter (zero-cost, Params = void).
Definition
centers.hpp:45
siderust::centers::NoParams
Marker for simple (no-parameter) centers.
Definition
centers.hpp:58
siderust::centers::Topocentric
Observer on Earth's surface (Params = Geodetic).
Definition
centers.hpp:49
siderust::centers::has_center_transform
Marks center pairs for which a CenterShiftProvider exists.
Definition
centers.hpp:106
siderust::centers::is_center
Definition
centers.hpp:30
include
siderust
centers.hpp
Generated by
1.9.8