RTC Toolkit 6.0.0
Loading...
Searching...
No Matches
fitsColumnFormat.ipp
Go to the documentation of this file.
1
11
12// Note this is a template implementation file and should not be included directly.
13// The typical header protection macro is not added to avoid it showing up in Doxygen API
14// documentation.
15#pragma once
16
20
21#include <array>
22#include <limits>
23#include <optional>
24#include <type_traits>
25
27
28template <class T>
29struct FitsColumnFormat<T, typename std::enable_if_t<IS_STD_ARRAY_TYPE<T>>> {
30 static constexpr std::string_view PREFIX = "";
31 static constexpr std::string_view TYPE = FitsColumnFormat<typename T::value_type>::TYPE;
32 static constexpr std::optional<size_t> COUNT = std::tuple_size_v<T>;
33};
34
35template <class T>
36struct FitsColumnFormat<T, typename std::enable_if_t<IS_STATIC_SPAN_TYPE<T>>> {
37 static constexpr std::string_view PREFIX = "";
38 static constexpr std::string_view TYPE = FitsColumnFormat<typename T::value_type>::TYPE;
39 static constexpr std::optional<size_t> COUNT = static_cast<size_t>(T::extent);
40};
41
42template <class T>
43struct FitsColumnFormat<T, typename std::enable_if_t<IS_DYNAMIC_SPAN_TYPE<T>>> {
44 static constexpr std::string_view PREFIX = "P";
45 static constexpr std::string_view TYPE = FitsColumnFormat<typename T::value_type>::TYPE;
46 static constexpr std::optional<size_t> COUNT = std::nullopt;
47};
48
49template <class T>
50struct FitsColumnFormat<T, typename std::enable_if_t<IS_VECTOR_TYPE<T>>> {
51 static constexpr std::string_view PREFIX = "P";
52 static constexpr std::string_view TYPE = FitsColumnFormat<typename T::value_type>::TYPE;
53 static constexpr std::optional<size_t> COUNT = std::nullopt;
54};
55
56template <class T>
57struct FitsColumnFormat<T, typename std::enable_if_t<IS_MATRIX_BUFFER_TYPE<T>>> {
58 static constexpr std::string_view PREFIX = "P";
59 static constexpr std::string_view TYPE = FitsColumnFormat<typename T::value_type>::TYPE;
60 static constexpr std::optional<size_t> COUNT = std::nullopt;
61};
62
63// Disabled: string type is a variable length type
64template <>
65struct FitsColumnFormat<std::string> {
66 static constexpr std::string_view PREFIX = "";
67 static constexpr std::string_view TYPE = "A";
68 static constexpr std::optional<size_t> COUNT = std::nullopt;
69};
70
71template <>
72struct FitsColumnFormat<bool> {
73 static constexpr std::string_view PREFIX = "";
74 static constexpr std::string_view TYPE = "L";
75 static constexpr size_t COUNT = 1;
76};
77
78template <>
79struct FitsColumnFormat<uint8_t> {
80 static constexpr std::string_view PREFIX = "";
81 static constexpr std::string_view TYPE = "B";
82 static constexpr size_t COUNT = 1;
83};
84
85template <>
86struct FitsColumnFormat<int8_t> {
87 static constexpr std::string_view PREFIX = "";
88 static constexpr std::string_view TYPE = "S";
89 static constexpr size_t COUNT = 1;
90};
91
92template <>
93struct FitsColumnFormat<int16_t> {
94 static constexpr std::string_view PREFIX = "";
95 static constexpr std::string_view TYPE = "I";
96 static constexpr size_t COUNT = 1;
97};
98
99template <>
100struct FitsColumnFormat<uint16_t> {
101 static constexpr std::string_view PREFIX = "";
102 static constexpr std::string_view TYPE = "U";
103 static constexpr size_t COUNT = 1;
104};
105
106template <>
107struct FitsColumnFormat<int32_t> {
108 static constexpr std::string_view PREFIX = "";
109 static constexpr std::string_view TYPE = "J";
110 static constexpr size_t COUNT = 1;
111};
112
113template <>
114struct FitsColumnFormat<uint32_t> {
115 static constexpr std::string_view PREFIX = "";
116 static constexpr std::string_view TYPE = "V";
117 static constexpr size_t COUNT = 1;
118};
119
120template <>
121struct FitsColumnFormat<int64_t> {
122 static constexpr std::string_view PREFIX = "";
123 static constexpr std::string_view TYPE = "K";
124 static constexpr size_t COUNT = 1;
125};
126
127template <>
128struct FitsColumnFormat<uint64_t> {
129 static constexpr std::string_view PREFIX = "";
130 static constexpr std::string_view TYPE = "W";
131 static constexpr size_t COUNT = 1;
132};
133
134template <>
135struct FitsColumnFormat<float> {
136 static constexpr std::string_view PREFIX = "";
137 static constexpr std::string_view TYPE = "E";
138 static constexpr size_t COUNT = 1;
139};
140
141template <>
142struct FitsColumnFormat<double> {
143 static constexpr std::string_view PREFIX = "";
144 static constexpr std::string_view TYPE = "D";
145 static constexpr size_t COUNT = 1;
146};
147
148template <class T, class... Args>
149void GetFITSTForm(std::vector<std::string>& input) {
150 input.push_back(GetFitsType<T>());
151 if constexpr (sizeof...(Args) != 0) {
152 GetFITSTForm<Args...>(input);
153 }
154}
155
156template <class T, class... Args>
157void GetFITSTFormWithLength(std::vector<std::string>& input,
158 const gsl::span<std::optional<size_t>, sizeof...(Args) + 1> sizes) {
159 if (sizes[0].has_value() and sizes[0].value() > 0) {
160 input.push_back(GetFitsType<T>(sizes[0].value()));
161 } else {
162 input.push_back(GetFitsType<T>());
163 }
164 if constexpr (sizeof...(Args) != 0) {
165 // template disambiguator needed
166 GetFITSTFormWithLength<Args...>(input, sizes.template subspan<1>());
167 }
168}
169
170} // namespace rtctk::componentFramework
Class used to parse default command line arguments.
Definition rtcComponentArgs.hpp:32
fitscolumnFormat is used to get a fits type from a C++ type.
Definition commandReplier.cpp:21
std::string GetFitsType(const std::optional< size_t > length=FitsColumnFormat< T >::COUNT)
Get the TFORM value for a type.
Definition fitsColumnFormat.hpp:36
void GetFITSTFormWithLength(std::vector< std::string > &input, const gsl::span< std::optional< size_t >, sizeof...(Args)+1 > sizes)
Get a vactor of TFORM strings for a list of types using the custom sizes provided.
Definition fitsColumnFormat.ipp:157
void GetFITSTForm(std::vector< std::string > &input)
Get a vactor of TFORM strings for a list of types.
Definition fitsColumnFormat.ipp:149
Definition ddsSub.hpp:155
FitsRecorder allows to write ColumnData to into fits files in a specified directory.
static constexpr std::optional< size_t > COUNT
Definition fitsColumnFormat.ipp:32
static constexpr std::string_view TYPE
Definition fitsColumnFormat.ipp:31
static constexpr std::string_view PREFIX
Definition fitsColumnFormat.ipp:30
static constexpr std::optional< size_t > COUNT
Definition fitsColumnFormat.ipp:60
static constexpr std::string_view PREFIX
Definition fitsColumnFormat.ipp:37
static constexpr std::optional< size_t > COUNT
Definition fitsColumnFormat.ipp:39
static constexpr std::optional< size_t > COUNT
Definition fitsColumnFormat.ipp:46
static constexpr std::string_view TYPE
Definition fitsColumnFormat.ipp:52
static constexpr std::optional< size_t > COUNT
Definition fitsColumnFormat.ipp:53
static constexpr std::string_view PREFIX
Definition fitsColumnFormat.ipp:51
static constexpr std::string_view PREFIX
Definition fitsColumnFormat.ipp:73
static constexpr std::string_view TYPE
Definition fitsColumnFormat.ipp:74
static constexpr size_t COUNT
Definition fitsColumnFormat.ipp:75
static constexpr size_t COUNT
Definition fitsColumnFormat.ipp:145
static constexpr std::string_view TYPE
Definition fitsColumnFormat.ipp:144
static constexpr std::string_view PREFIX
Definition fitsColumnFormat.ipp:143
static constexpr size_t COUNT
Definition fitsColumnFormat.ipp:138
static constexpr std::string_view TYPE
Definition fitsColumnFormat.ipp:137
static constexpr std::string_view PREFIX
Definition fitsColumnFormat.ipp:136
static constexpr size_t COUNT
Definition fitsColumnFormat.ipp:96
static constexpr std::string_view TYPE
Definition fitsColumnFormat.ipp:95
static constexpr std::string_view PREFIX
Definition fitsColumnFormat.ipp:94
static constexpr size_t COUNT
Definition fitsColumnFormat.ipp:110
static constexpr std::string_view PREFIX
Definition fitsColumnFormat.ipp:108
static constexpr std::string_view TYPE
Definition fitsColumnFormat.ipp:109
static constexpr size_t COUNT
Definition fitsColumnFormat.ipp:124
static constexpr std::string_view PREFIX
Definition fitsColumnFormat.ipp:122
static constexpr std::string_view TYPE
Definition fitsColumnFormat.ipp:123
static constexpr std::string_view PREFIX
Definition fitsColumnFormat.ipp:87
static constexpr size_t COUNT
Definition fitsColumnFormat.ipp:89
static constexpr std::string_view TYPE
Definition fitsColumnFormat.ipp:88
static constexpr std::string_view TYPE
Definition fitsColumnFormat.ipp:67
static constexpr std::optional< size_t > COUNT
Definition fitsColumnFormat.ipp:68
static constexpr std::string_view PREFIX
Definition fitsColumnFormat.ipp:66
static constexpr std::string_view TYPE
Definition fitsColumnFormat.ipp:102
static constexpr size_t COUNT
Definition fitsColumnFormat.ipp:103
static constexpr std::string_view PREFIX
Definition fitsColumnFormat.ipp:101
static constexpr std::string_view TYPE
Definition fitsColumnFormat.ipp:116
static constexpr std::string_view PREFIX
Definition fitsColumnFormat.ipp:115
static constexpr size_t COUNT
Definition fitsColumnFormat.ipp:117
static constexpr std::string_view TYPE
Definition fitsColumnFormat.ipp:130
static constexpr size_t COUNT
Definition fitsColumnFormat.ipp:131
static constexpr std::string_view PREFIX
Definition fitsColumnFormat.ipp:129
static constexpr size_t COUNT
Definition fitsColumnFormat.ipp:82
static constexpr std::string_view PREFIX
Definition fitsColumnFormat.ipp:80
static constexpr std::string_view TYPE
Definition fitsColumnFormat.ipp:81
Type that stores type information for a FITS TFORM string.
Definition fitsColumnFormat.hpp:30
Provides useful mechanisms to test various type traits.