qtty-cpp 0.4.5
Header-only C++ wrapper for qtty
Loading...
Searching...
No Matches
length.hpp
Go to the documentation of this file.
1// SPDX-License-Identifier: BSD-3-Clause
2// Copyright (C) 2026 Vallés Puig, Ramon
3
4#pragma once
5
6#include "../ffi_core.hpp"
7
8namespace qtty {
9
11struct YoctometerTag {};
12struct ZeptometerTag {};
13struct AttometerTag {};
14struct FemtometerTag {};
15struct PicometerTag {};
16struct NanometerTag {};
17struct MicrometerTag {};
18struct MillimeterTag {};
19struct CentimeterTag {};
20struct DecimeterTag {};
21struct MeterTag {};
22struct DecameterTag {};
23struct HectometerTag {};
24struct KilometerTag {};
25struct MegameterTag {};
26struct GigameterTag {};
27struct TerameterTag {};
28struct PetameterTag {};
29struct ExameterTag {};
30struct ZettameterTag {};
31struct YottameterTag {};
32struct BohrRadiusTag {};
36struct LightYearTag {};
37struct ParsecTag {};
38struct KiloparsecTag {};
39struct MegaparsecTag {};
40struct GigaparsecTag {};
41struct InchTag {};
42struct FootTag {};
43struct YardTag {};
44struct MileTag {};
45struct LinkTag {};
46struct FathomTag {};
47struct RodTag {};
48struct ChainTag {};
60
61template <> struct UnitTraits<PlanckLengthTag> {
62 static constexpr UnitId unit_id() { return UNIT_ID_PLANCK_LENGTH; }
63 static constexpr std::string_view symbol() { return "lp"; }
64 static constexpr DimensionId dimension() { return DIMENSION_ID_LENGTH; }
65};
66template <> struct UnitTraits<YoctometerTag> {
67 static constexpr UnitId unit_id() { return UNIT_ID_YOCTOMETER; }
68 static constexpr std::string_view symbol() { return "ym"; }
69 static constexpr DimensionId dimension() { return DIMENSION_ID_LENGTH; }
70};
71template <> struct UnitTraits<ZeptometerTag> {
72 static constexpr UnitId unit_id() { return UNIT_ID_ZEPTOMETER; }
73 static constexpr std::string_view symbol() { return "zm"; }
74 static constexpr DimensionId dimension() { return DIMENSION_ID_LENGTH; }
75};
76template <> struct UnitTraits<AttometerTag> {
77 static constexpr UnitId unit_id() { return UNIT_ID_ATTOMETER; }
78 static constexpr std::string_view symbol() { return "am"; }
79 static constexpr DimensionId dimension() { return DIMENSION_ID_LENGTH; }
80};
81template <> struct UnitTraits<FemtometerTag> {
82 static constexpr UnitId unit_id() { return UNIT_ID_FEMTOMETER; }
83 static constexpr std::string_view symbol() { return "fm"; }
84 static constexpr DimensionId dimension() { return DIMENSION_ID_LENGTH; }
85};
86template <> struct UnitTraits<PicometerTag> {
87 static constexpr UnitId unit_id() { return UNIT_ID_PICOMETER; }
88 static constexpr std::string_view symbol() { return "pm"; }
89 static constexpr DimensionId dimension() { return DIMENSION_ID_LENGTH; }
90};
91template <> struct UnitTraits<NanometerTag> {
92 static constexpr UnitId unit_id() { return UNIT_ID_NANOMETER; }
93 static constexpr std::string_view symbol() { return "nm"; }
94 static constexpr DimensionId dimension() { return DIMENSION_ID_LENGTH; }
95};
96template <> struct UnitTraits<MicrometerTag> {
97 static constexpr UnitId unit_id() { return UNIT_ID_MICROMETER; }
98 static constexpr std::string_view symbol() { return "μm"; }
99 static constexpr DimensionId dimension() { return DIMENSION_ID_LENGTH; }
100};
101template <> struct UnitTraits<MillimeterTag> {
102 static constexpr UnitId unit_id() { return UNIT_ID_MILLIMETER; }
103 static constexpr std::string_view symbol() { return "mm"; }
104 static constexpr DimensionId dimension() { return DIMENSION_ID_LENGTH; }
105};
106template <> struct UnitTraits<CentimeterTag> {
107 static constexpr UnitId unit_id() { return UNIT_ID_CENTIMETER; }
108 static constexpr std::string_view symbol() { return "cm"; }
109 static constexpr DimensionId dimension() { return DIMENSION_ID_LENGTH; }
110};
111template <> struct UnitTraits<DecimeterTag> {
112 static constexpr UnitId unit_id() { return UNIT_ID_DECIMETER; }
113 static constexpr std::string_view symbol() { return "dm"; }
114 static constexpr DimensionId dimension() { return DIMENSION_ID_LENGTH; }
115};
116template <> struct UnitTraits<MeterTag> {
117 static constexpr UnitId unit_id() { return UNIT_ID_METER; }
118 static constexpr std::string_view symbol() { return "m"; }
119 static constexpr DimensionId dimension() { return DIMENSION_ID_LENGTH; }
120};
121template <> struct UnitTraits<DecameterTag> {
122 static constexpr UnitId unit_id() { return UNIT_ID_DECAMETER; }
123 static constexpr std::string_view symbol() { return "dam"; }
124 static constexpr DimensionId dimension() { return DIMENSION_ID_LENGTH; }
125};
126template <> struct UnitTraits<HectometerTag> {
127 static constexpr UnitId unit_id() { return UNIT_ID_HECTOMETER; }
128 static constexpr std::string_view symbol() { return "hm"; }
129 static constexpr DimensionId dimension() { return DIMENSION_ID_LENGTH; }
130};
131template <> struct UnitTraits<KilometerTag> {
132 static constexpr UnitId unit_id() { return UNIT_ID_KILOMETER; }
133 static constexpr std::string_view symbol() { return "km"; }
134 static constexpr DimensionId dimension() { return DIMENSION_ID_LENGTH; }
135};
136template <> struct UnitTraits<MegameterTag> {
137 static constexpr UnitId unit_id() { return UNIT_ID_MEGAMETER; }
138 static constexpr std::string_view symbol() { return "Mm"; }
139 static constexpr DimensionId dimension() { return DIMENSION_ID_LENGTH; }
140};
141template <> struct UnitTraits<GigameterTag> {
142 static constexpr UnitId unit_id() { return UNIT_ID_GIGAMETER; }
143 static constexpr std::string_view symbol() { return "Gm"; }
144 static constexpr DimensionId dimension() { return DIMENSION_ID_LENGTH; }
145};
146template <> struct UnitTraits<TerameterTag> {
147 static constexpr UnitId unit_id() { return UNIT_ID_TERAMETER; }
148 static constexpr std::string_view symbol() { return "Tm"; }
149 static constexpr DimensionId dimension() { return DIMENSION_ID_LENGTH; }
150};
151template <> struct UnitTraits<PetameterTag> {
152 static constexpr UnitId unit_id() { return UNIT_ID_PETAMETER; }
153 static constexpr std::string_view symbol() { return "Pm"; }
154 static constexpr DimensionId dimension() { return DIMENSION_ID_LENGTH; }
155};
156template <> struct UnitTraits<ExameterTag> {
157 static constexpr UnitId unit_id() { return UNIT_ID_EXAMETER; }
158 static constexpr std::string_view symbol() { return "Em"; }
159 static constexpr DimensionId dimension() { return DIMENSION_ID_LENGTH; }
160};
161template <> struct UnitTraits<ZettameterTag> {
162 static constexpr UnitId unit_id() { return UNIT_ID_ZETTAMETER; }
163 static constexpr std::string_view symbol() { return "Zm"; }
164 static constexpr DimensionId dimension() { return DIMENSION_ID_LENGTH; }
165};
166template <> struct UnitTraits<YottameterTag> {
167 static constexpr UnitId unit_id() { return UNIT_ID_YOTTAMETER; }
168 static constexpr std::string_view symbol() { return "Ym"; }
169 static constexpr DimensionId dimension() { return DIMENSION_ID_LENGTH; }
170};
171template <> struct UnitTraits<BohrRadiusTag> {
172 static constexpr UnitId unit_id() { return UNIT_ID_BOHR_RADIUS; }
173 static constexpr std::string_view symbol() { return "a0"; }
174 static constexpr DimensionId dimension() { return DIMENSION_ID_LENGTH; }
175};
177 static constexpr UnitId unit_id() { return UNIT_ID_CLASSICAL_ELECTRON_RADIUS; }
178 static constexpr std::string_view symbol() { return "re"; }
179 static constexpr DimensionId dimension() { return DIMENSION_ID_LENGTH; }
180};
183 static constexpr std::string_view symbol() { return "lambda_bar_e"; }
184 static constexpr DimensionId dimension() { return DIMENSION_ID_LENGTH; }
185};
186template <> struct UnitTraits<AstronomicalUnitTag> {
187 static constexpr UnitId unit_id() { return UNIT_ID_ASTRONOMICAL_UNIT; }
188 static constexpr std::string_view symbol() { return "au"; }
189 static constexpr DimensionId dimension() { return DIMENSION_ID_LENGTH; }
190};
191template <> struct UnitTraits<LightYearTag> {
192 static constexpr UnitId unit_id() { return UNIT_ID_LIGHT_YEAR; }
193 static constexpr std::string_view symbol() { return "ly"; }
194 static constexpr DimensionId dimension() { return DIMENSION_ID_LENGTH; }
195};
196template <> struct UnitTraits<ParsecTag> {
197 static constexpr UnitId unit_id() { return UNIT_ID_PARSEC; }
198 static constexpr std::string_view symbol() { return "pc"; }
199 static constexpr DimensionId dimension() { return DIMENSION_ID_LENGTH; }
200};
201template <> struct UnitTraits<KiloparsecTag> {
202 static constexpr UnitId unit_id() { return UNIT_ID_KILOPARSEC; }
203 static constexpr std::string_view symbol() { return "kpc"; }
204 static constexpr DimensionId dimension() { return DIMENSION_ID_LENGTH; }
205};
206template <> struct UnitTraits<MegaparsecTag> {
207 static constexpr UnitId unit_id() { return UNIT_ID_MEGAPARSEC; }
208 static constexpr std::string_view symbol() { return "Mpc"; }
209 static constexpr DimensionId dimension() { return DIMENSION_ID_LENGTH; }
210};
211template <> struct UnitTraits<GigaparsecTag> {
212 static constexpr UnitId unit_id() { return UNIT_ID_GIGAPARSEC; }
213 static constexpr std::string_view symbol() { return "Gpc"; }
214 static constexpr DimensionId dimension() { return DIMENSION_ID_LENGTH; }
215};
216template <> struct UnitTraits<InchTag> {
217 static constexpr UnitId unit_id() { return UNIT_ID_INCH; }
218 static constexpr std::string_view symbol() { return "in"; }
219 static constexpr DimensionId dimension() { return DIMENSION_ID_LENGTH; }
220};
221template <> struct UnitTraits<FootTag> {
222 static constexpr UnitId unit_id() { return UNIT_ID_FOOT; }
223 static constexpr std::string_view symbol() { return "ft"; }
224 static constexpr DimensionId dimension() { return DIMENSION_ID_LENGTH; }
225};
226template <> struct UnitTraits<YardTag> {
227 static constexpr UnitId unit_id() { return UNIT_ID_YARD; }
228 static constexpr std::string_view symbol() { return "yd"; }
229 static constexpr DimensionId dimension() { return DIMENSION_ID_LENGTH; }
230};
231template <> struct UnitTraits<MileTag> {
232 static constexpr UnitId unit_id() { return UNIT_ID_MILE; }
233 static constexpr std::string_view symbol() { return "mi"; }
234 static constexpr DimensionId dimension() { return DIMENSION_ID_LENGTH; }
235};
236template <> struct UnitTraits<LinkTag> {
237 static constexpr UnitId unit_id() { return UNIT_ID_LINK; }
238 static constexpr std::string_view symbol() { return "lk"; }
239 static constexpr DimensionId dimension() { return DIMENSION_ID_LENGTH; }
240};
241template <> struct UnitTraits<FathomTag> {
242 static constexpr UnitId unit_id() { return UNIT_ID_FATHOM; }
243 static constexpr std::string_view symbol() { return "ftm"; }
244 static constexpr DimensionId dimension() { return DIMENSION_ID_LENGTH; }
245};
246template <> struct UnitTraits<RodTag> {
247 static constexpr UnitId unit_id() { return UNIT_ID_ROD; }
248 static constexpr std::string_view symbol() { return "rd"; }
249 static constexpr DimensionId dimension() { return DIMENSION_ID_LENGTH; }
250};
251template <> struct UnitTraits<ChainTag> {
252 static constexpr UnitId unit_id() { return UNIT_ID_CHAIN; }
253 static constexpr std::string_view symbol() { return "ch"; }
254 static constexpr DimensionId dimension() { return DIMENSION_ID_LENGTH; }
255};
256template <> struct UnitTraits<NauticalMileTag> {
257 static constexpr UnitId unit_id() { return UNIT_ID_NAUTICAL_MILE; }
258 static constexpr std::string_view symbol() { return "nmi"; }
259 static constexpr DimensionId dimension() { return DIMENSION_ID_LENGTH; }
260};
262 static constexpr UnitId unit_id() { return UNIT_ID_NOMINAL_LUNAR_RADIUS; }
263 static constexpr std::string_view symbol() { return "Rmoon"; }
264 static constexpr DimensionId dimension() { return DIMENSION_ID_LENGTH; }
265};
267 static constexpr UnitId unit_id() { return UNIT_ID_NOMINAL_LUNAR_DISTANCE; }
268 static constexpr std::string_view symbol() { return "LD"; }
269 static constexpr DimensionId dimension() { return DIMENSION_ID_LENGTH; }
270};
272 static constexpr UnitId unit_id() { return UNIT_ID_NOMINAL_EARTH_POLAR_RADIUS; }
273 static constexpr std::string_view symbol() { return "Rearth_p"; }
274 static constexpr DimensionId dimension() { return DIMENSION_ID_LENGTH; }
275};
277 static constexpr UnitId unit_id() { return UNIT_ID_NOMINAL_EARTH_RADIUS; }
278 static constexpr std::string_view symbol() { return "Rearth"; }
279 static constexpr DimensionId dimension() { return DIMENSION_ID_LENGTH; }
280};
283 static constexpr std::string_view symbol() { return "Rearth_eq"; }
284 static constexpr DimensionId dimension() { return DIMENSION_ID_LENGTH; }
285};
288 static constexpr std::string_view symbol() { return "Cmer"; }
289 static constexpr DimensionId dimension() { return DIMENSION_ID_LENGTH; }
290};
293 static constexpr std::string_view symbol() { return "Ceq"; }
294 static constexpr DimensionId dimension() { return DIMENSION_ID_LENGTH; }
295};
297 static constexpr UnitId unit_id() { return UNIT_ID_NOMINAL_JUPITER_RADIUS; }
298 static constexpr std::string_view symbol() { return "Rjup"; }
299 static constexpr DimensionId dimension() { return DIMENSION_ID_LENGTH; }
300};
302 static constexpr UnitId unit_id() { return UNIT_ID_NOMINAL_SOLAR_RADIUS; }
303 static constexpr std::string_view symbol() { return "Rsun"; }
304 static constexpr DimensionId dimension() { return DIMENSION_ID_LENGTH; }
305};
307 static constexpr UnitId unit_id() { return UNIT_ID_NOMINAL_SOLAR_DIAMETER; }
308 static constexpr std::string_view symbol() { return "Dsun"; }
309 static constexpr DimensionId dimension() { return DIMENSION_ID_LENGTH; }
310};
311
362
363} // namespace qtty
constexpr bool is_angular_v
Definition angles.hpp:49
static constexpr std::string_view symbol()
Definition length.hpp:188
static constexpr UnitId unit_id()
Definition length.hpp:187
static constexpr DimensionId dimension()
Definition length.hpp:189
static constexpr DimensionId dimension()
Definition length.hpp:79
static constexpr UnitId unit_id()
Definition length.hpp:77
static constexpr std::string_view symbol()
Definition length.hpp:78
static constexpr DimensionId dimension()
Definition length.hpp:174
static constexpr UnitId unit_id()
Definition length.hpp:172
static constexpr std::string_view symbol()
Definition length.hpp:173
static constexpr DimensionId dimension()
Definition length.hpp:109
static constexpr UnitId unit_id()
Definition length.hpp:107
static constexpr std::string_view symbol()
Definition length.hpp:108
static constexpr std::string_view symbol()
Definition length.hpp:253
static constexpr UnitId unit_id()
Definition length.hpp:252
static constexpr DimensionId dimension()
Definition length.hpp:254
static constexpr DimensionId dimension()
Definition length.hpp:179
static constexpr std::string_view symbol()
Definition length.hpp:178
static constexpr std::string_view symbol()
Definition length.hpp:123
static constexpr UnitId unit_id()
Definition length.hpp:122
static constexpr DimensionId dimension()
Definition length.hpp:124
static constexpr UnitId unit_id()
Definition length.hpp:112
static constexpr std::string_view symbol()
Definition length.hpp:113
static constexpr DimensionId dimension()
Definition length.hpp:114
static constexpr DimensionId dimension()
Definition length.hpp:294
static constexpr std::string_view symbol()
Definition length.hpp:293
static constexpr std::string_view symbol()
Definition length.hpp:288
static constexpr DimensionId dimension()
Definition length.hpp:289
static constexpr std::string_view symbol()
Definition length.hpp:183
static constexpr UnitId unit_id()
Definition length.hpp:157
static constexpr DimensionId dimension()
Definition length.hpp:159
static constexpr std::string_view symbol()
Definition length.hpp:158
static constexpr std::string_view symbol()
Definition length.hpp:243
static constexpr DimensionId dimension()
Definition length.hpp:244
static constexpr UnitId unit_id()
Definition length.hpp:242
static constexpr std::string_view symbol()
Definition length.hpp:83
static constexpr DimensionId dimension()
Definition length.hpp:84
static constexpr UnitId unit_id()
Definition length.hpp:82
static constexpr DimensionId dimension()
Definition length.hpp:224
static constexpr UnitId unit_id()
Definition length.hpp:222
static constexpr std::string_view symbol()
Definition length.hpp:223
static constexpr UnitId unit_id()
Definition length.hpp:142
static constexpr DimensionId dimension()
Definition length.hpp:144
static constexpr std::string_view symbol()
Definition length.hpp:143
static constexpr DimensionId dimension()
Definition length.hpp:214
static constexpr std::string_view symbol()
Definition length.hpp:213
static constexpr UnitId unit_id()
Definition length.hpp:212
static constexpr std::string_view symbol()
Definition length.hpp:128
static constexpr DimensionId dimension()
Definition length.hpp:129
static constexpr UnitId unit_id()
Definition length.hpp:127
static constexpr UnitId unit_id()
Definition length.hpp:217
static constexpr std::string_view symbol()
Definition length.hpp:218
static constexpr DimensionId dimension()
Definition length.hpp:219
static constexpr UnitId unit_id()
Definition length.hpp:132
static constexpr DimensionId dimension()
Definition length.hpp:134
static constexpr std::string_view symbol()
Definition length.hpp:133
static constexpr UnitId unit_id()
Definition length.hpp:202
static constexpr DimensionId dimension()
Definition length.hpp:204
static constexpr std::string_view symbol()
Definition length.hpp:203
static constexpr DimensionId dimension()
Definition length.hpp:194
static constexpr std::string_view symbol()
Definition length.hpp:193
static constexpr UnitId unit_id()
Definition length.hpp:192
static constexpr UnitId unit_id()
Definition length.hpp:237
static constexpr DimensionId dimension()
Definition length.hpp:239
static constexpr std::string_view symbol()
Definition length.hpp:238
static constexpr UnitId unit_id()
Definition length.hpp:137
static constexpr DimensionId dimension()
Definition length.hpp:139
static constexpr std::string_view symbol()
Definition length.hpp:138
static constexpr UnitId unit_id()
Definition length.hpp:207
static constexpr std::string_view symbol()
Definition length.hpp:208
static constexpr DimensionId dimension()
Definition length.hpp:209
static constexpr std::string_view symbol()
Definition length.hpp:118
static constexpr UnitId unit_id()
Definition length.hpp:117
static constexpr DimensionId dimension()
Definition length.hpp:119
static constexpr UnitId unit_id()
Definition length.hpp:97
static constexpr std::string_view symbol()
Definition length.hpp:98
static constexpr DimensionId dimension()
Definition length.hpp:99
static constexpr DimensionId dimension()
Definition length.hpp:234
static constexpr UnitId unit_id()
Definition length.hpp:232
static constexpr std::string_view symbol()
Definition length.hpp:233
static constexpr DimensionId dimension()
Definition length.hpp:104
static constexpr std::string_view symbol()
Definition length.hpp:103
static constexpr UnitId unit_id()
Definition length.hpp:102
static constexpr UnitId unit_id()
Definition length.hpp:92
static constexpr std::string_view symbol()
Definition length.hpp:93
static constexpr DimensionId dimension()
Definition length.hpp:94
static constexpr std::string_view symbol()
Definition length.hpp:258
static constexpr DimensionId dimension()
Definition length.hpp:259
static constexpr UnitId unit_id()
Definition length.hpp:257
static constexpr DimensionId dimension()
Definition length.hpp:284
static constexpr std::string_view symbol()
Definition length.hpp:283
static constexpr std::string_view symbol()
Definition length.hpp:273
static constexpr DimensionId dimension()
Definition length.hpp:274
static constexpr std::string_view symbol()
Definition length.hpp:278
static constexpr UnitId unit_id()
Definition length.hpp:277
static constexpr DimensionId dimension()
Definition length.hpp:279
static constexpr UnitId unit_id()
Definition length.hpp:297
static constexpr std::string_view symbol()
Definition length.hpp:298
static constexpr DimensionId dimension()
Definition length.hpp:299
static constexpr DimensionId dimension()
Definition length.hpp:269
static constexpr std::string_view symbol()
Definition length.hpp:268
static constexpr UnitId unit_id()
Definition length.hpp:267
static constexpr std::string_view symbol()
Definition length.hpp:263
static constexpr UnitId unit_id()
Definition length.hpp:262
static constexpr DimensionId dimension()
Definition length.hpp:264
static constexpr UnitId unit_id()
Definition length.hpp:307
static constexpr std::string_view symbol()
Definition length.hpp:308
static constexpr DimensionId dimension()
Definition length.hpp:309
static constexpr DimensionId dimension()
Definition length.hpp:304
static constexpr UnitId unit_id()
Definition length.hpp:302
static constexpr std::string_view symbol()
Definition length.hpp:303
static constexpr std::string_view symbol()
Definition length.hpp:198
static constexpr DimensionId dimension()
Definition length.hpp:199
static constexpr UnitId unit_id()
Definition length.hpp:197
static constexpr std::string_view symbol()
Definition length.hpp:153
static constexpr DimensionId dimension()
Definition length.hpp:154
static constexpr UnitId unit_id()
Definition length.hpp:152
static constexpr UnitId unit_id()
Definition length.hpp:87
static constexpr std::string_view symbol()
Definition length.hpp:88
static constexpr DimensionId dimension()
Definition length.hpp:89
static constexpr DimensionId dimension()
Definition length.hpp:64
static constexpr UnitId unit_id()
Definition length.hpp:62
static constexpr std::string_view symbol()
Definition length.hpp:63
static constexpr DimensionId dimension()
Definition length.hpp:249
static constexpr UnitId unit_id()
Definition length.hpp:247
static constexpr std::string_view symbol()
Definition length.hpp:248
static constexpr std::string_view symbol()
Definition length.hpp:148
static constexpr UnitId unit_id()
Definition length.hpp:147
static constexpr DimensionId dimension()
Definition length.hpp:149
static constexpr DimensionId dimension()
Definition length.hpp:229
static constexpr std::string_view symbol()
Definition length.hpp:228
static constexpr UnitId unit_id()
Definition length.hpp:227
static constexpr std::string_view symbol()
Definition length.hpp:68
static constexpr UnitId unit_id()
Definition length.hpp:67
static constexpr DimensionId dimension()
Definition length.hpp:69
static constexpr DimensionId dimension()
Definition length.hpp:169
static constexpr UnitId unit_id()
Definition length.hpp:167
static constexpr std::string_view symbol()
Definition length.hpp:168
static constexpr std::string_view symbol()
Definition length.hpp:73
static constexpr DimensionId dimension()
Definition length.hpp:74
static constexpr UnitId unit_id()
Definition length.hpp:72
static constexpr DimensionId dimension()
Definition length.hpp:164
static constexpr std::string_view symbol()
Definition length.hpp:163
static constexpr UnitId unit_id()
Definition length.hpp:162