siderust-cpp
0.8.0
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>
struct
CenterTraits
;
// primary — intentionally undefined
27
28
template
<
typename
C,
typename
=
void
>
struct
is_center
: std::false_type {};
29
30
template
<
typename
C>
31
struct
is_center
<C, std::void_t<decltype(CenterTraits<C>::ffi_id)>> : std::true_type {};
32
33
template
<
typename
C>
inline
constexpr
bool
is_center_v
=
is_center<C>::value
;
34
35
// ============================================================================
36
// Center Tag Definitions
37
// ============================================================================
38
40
struct
Barycentric
{};
42
struct
Heliocentric
{};
44
struct
Geocentric
{};
46
struct
Topocentric
{};
48
struct
Bodycentric
{};
49
50
// ============================================================================
51
// CenterTraits Specializations
52
// ============================================================================
53
55
struct
NoParams
{};
56
57
template
<>
struct
CenterTraits
<
Barycentric
> {
58
static
constexpr
siderust_center_t ffi_id = SIDERUST_CENTER_T_BARYCENTRIC;
59
using
Params
=
NoParams
;
60
static
constexpr
const
char
*
name
() {
return
"Barycentric"
; }
61
};
62
63
template
<>
struct
CenterTraits
<
Heliocentric
> {
64
static
constexpr
siderust_center_t ffi_id = SIDERUST_CENTER_T_HELIOCENTRIC;
65
using
Params
=
NoParams
;
66
static
constexpr
const
char
*
name
() {
return
"Heliocentric"
; }
67
};
68
69
template
<>
struct
CenterTraits
<
Geocentric
> {
70
static
constexpr
siderust_center_t ffi_id = SIDERUST_CENTER_T_GEOCENTRIC;
71
using
Params
=
NoParams
;
72
static
constexpr
const
char
*
name
() {
return
"Geocentric"
; }
73
};
74
75
template
<>
struct
CenterTraits
<
Topocentric
> {
76
static
constexpr
siderust_center_t ffi_id = SIDERUST_CENTER_T_TOPOCENTRIC;
77
using
Params
=
Geodetic
;
// forward-declared
78
static
constexpr
const
char
*
name
() {
return
"Topocentric"
; }
79
};
80
81
template
<>
struct
CenterTraits
<
Bodycentric
> {
82
static
constexpr
siderust_center_t ffi_id = SIDERUST_CENTER_T_BODYCENTRIC;
83
using
Params
=
NoParams
;
// placeholder for BodycentricParams
84
static
constexpr
const
char
*
name
() {
return
"Bodycentric"
; }
85
};
86
87
// ============================================================================
88
// Center-shift Valid Predicate
89
// ============================================================================
90
97
template
<
typename
From,
typename
To>
struct
has_center_transform
: std::false_type {};
98
99
template
<
typename
C>
struct
has_center_transform
<C, C> : std::true_type {};
100
101
#define SIDERUST_CENTER_TRANSFORM_PAIR(A, B) \
102
template <> struct has_center_transform<A, B> : std::true_type {}; \
103
template <> struct has_center_transform<B, A> : std::true_type {}
104
105
SIDERUST_CENTER_TRANSFORM_PAIR
(
Barycentric
,
Heliocentric
);
106
SIDERUST_CENTER_TRANSFORM_PAIR
(
Barycentric
,
Geocentric
);
107
SIDERUST_CENTER_TRANSFORM_PAIR
(
Heliocentric
,
Geocentric
);
108
109
#undef SIDERUST_CENTER_TRANSFORM_PAIR
110
111
template
<
typename
From,
typename
To>
112
inline
constexpr
bool
has_center_transform_v
=
has_center_transform<From, To>::value
;
113
114
}
// namespace centers
115
}
// namespace siderust
SIDERUST_CENTER_TRANSFORM_PAIR
#define SIDERUST_CENTER_TRANSFORM_PAIR(A, B)
Definition
centers.hpp:101
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:33
siderust::centers::has_center_transform_v
constexpr bool has_center_transform_v
Definition
centers.hpp:112
siderust
Definition
altitude.hpp:19
siderust::Geodetic
Geodetic position (WGS84 ellipsoid).
Definition
geodetic.hpp:29
siderust::centers::Barycentric
Solar-system barycenter (zero-cost, Params = void).
Definition
centers.hpp:40
siderust::centers::Bodycentric
Center of a body (Params = BodycentricParams).
Definition
centers.hpp:48
siderust::centers::CenterTraits< Barycentric >::name
static constexpr const char * name()
Definition
centers.hpp:60
siderust::centers::CenterTraits< Bodycentric >::name
static constexpr const char * name()
Definition
centers.hpp:84
siderust::centers::CenterTraits< Geocentric >::name
static constexpr const char * name()
Definition
centers.hpp:72
siderust::centers::CenterTraits< Heliocentric >::name
static constexpr const char * name()
Definition
centers.hpp:66
siderust::centers::CenterTraits< Topocentric >::name
static constexpr const char * name()
Definition
centers.hpp:78
siderust::centers::CenterTraits
Definition
centers.hpp:26
siderust::centers::Geocentric
Geocenter (zero-cost, Params = void).
Definition
centers.hpp:44
siderust::centers::Heliocentric
Heliocenter (zero-cost, Params = void).
Definition
centers.hpp:42
siderust::centers::NoParams
Marker for simple (no-parameter) centers.
Definition
centers.hpp:55
siderust::centers::Topocentric
Observer on Earth's surface (Params = Geodetic).
Definition
centers.hpp:46
siderust::centers::has_center_transform
Marks center pairs for which a CenterShiftProvider exists.
Definition
centers.hpp:97
siderust::centers::is_center
Definition
centers.hpp:28
include
siderust
centers.hpp
Generated by
1.9.8