9 #ifndef EAGINE_UNITS_BASE_DIM_HPP
10 #define EAGINE_UNITS_BASE_DIM_HPP
15 namespace eagine::units {
19 template <
typename Derived>
24 struct angle : dimension<angle> {};
25 struct solid_angle : dimension<solid_angle> {};
27 struct length : dimension<length> {};
28 struct mass : dimension<mass> {};
29 struct time : dimension<time> {};
31 struct temperature : dimension<temperature> {};
32 struct electric_current : dimension<electric_current> {};
33 struct number_of_cycles : dimension<number_of_cycles> {};
34 struct number_of_decays : dimension<number_of_decays> {};
35 struct luminous_intensity : dimension<luminous_intensity> {};
36 struct amount_of_substance : dimension<amount_of_substance> {};
37 struct amount_of_information : dimension<amount_of_information> {};
39 template <
typename Func>
40 auto for_each_dim(Func func) -> Func {
47 func(electric_current());
48 func(number_of_cycles());
49 func(number_of_decays());
50 func(luminous_intensity());
51 func(amount_of_substance());
52 func(amount_of_information());
54 return std::move(func);
58 template <
typename Dimension>
61 template <
typename Dim>
62 struct dim_num<dimension<Dim>> : dim_num<Dim> {};
64 template <
typename Dimension>
65 const int dim_num_v = dim_num<Dimension>::value;
90 struct dim_num<luminous_intensity> :
int_constant<10> {};
92 struct dim_num<amount_of_substance> :
int_constant<11> {};
94 struct dim_num<amount_of_information> :
int_constant<12> {};
97 template <
typename Derived>
98 static constexpr
auto get_number(dimension<Derived>) noexcept ->
int {
99 return dim_num_v<Derived>;
105 struct name_of<base::angle> {
106 static constexpr
const char mp_str[] =
"angle";
110 struct name_of<base::solid_angle> {
111 static constexpr
const char mp_str[] =
"solid angle";
115 struct name_of<base::mass> {
116 static constexpr
const char mp_str[] =
"mass";
120 struct name_of<base::length> {
121 static constexpr
const char mp_str[] =
"length";
125 struct name_of<base::time> {
126 static constexpr
const char mp_str[] =
"time";
130 struct name_of<base::temperature> {
131 static constexpr
const char mp_str[] =
"temperature";
135 struct name_of<base::electric_current> {
136 static constexpr
const char mp_str[] =
"electric current";
140 struct name_of<base::number_of_cycles> {
141 static constexpr
const char mp_str[] =
"number of cycles";
145 struct name_of<base::number_of_decays> {
146 static constexpr
const char mp_str[] =
"number of decays";
150 struct name_of<base::luminous_intensity> {
151 static constexpr
const char mp_str[] =
"luminous intensity";
155 struct name_of<base::amount_of_substance> {
156 static constexpr
const char mp_str[] =
"amount of substance";
160 struct name_of<base::amount_of_information> {
161 static constexpr
const char mp_str[] =
"amount of information";
166 #endif // EAGINE_UNITS_BASE_DIM_HPP