SI 2.5.4
A header only c++ library that provides type safety and user defined literals for handling physical values defined in the International System of Units.
Loading...
Searching...
No Matches
illuminance.h
Go to the documentation of this file.
1
12#pragma once
13
14#include "area.h"
17#include "detail/unit.h"
18#include "detail/unit_symbol.h"
19#include "luminous_flux.h"
20
21namespace SI {
22template <typename _type, class _ratio = std::ratio<1>>
23using illuminance_t = detail::unit_t<'i', std::ratio<1>, _type, _ratio>;
24
26template <typename _type> using atto_lux_t = illuminance_t<_type, std::atto>;
27template <typename _type> using femto_lux_t = illuminance_t<_type, std::femto>;
28template <typename _type> using pico_lux_t = illuminance_t<_type, std::pico>;
29template <typename _type> using nano_lux_t = illuminance_t<_type, std::nano>;
30template <typename _type> using micro_lux_t = illuminance_t<_type, std::micro>;
31template <typename _type> using milli_lux_t = illuminance_t<_type, std::milli>;
32template <typename _type> using lux_t = illuminance_t<_type, std::ratio<1>>;
33template <typename _type> using kilo_lux_t = illuminance_t<_type, std::kilo>;
34template <typename _type> using mega_lux_t = illuminance_t<_type, std::mega>;
35template <typename _type> using giga_lux_t = illuminance_t<_type, std::giga>;
36template <typename _type> using tera_lux_t = illuminance_t<_type, std::tera>;
37template <typename _type> using peta_lux_t = illuminance_t<_type, std::peta>;
38template <typename _type> using exa_lux_t = illuminance_t<_type, std::exa>;
39
40// specialize unit_symbol for usage with stream operators
41template <>
42struct unit_symbol<'i', std::ratio<1>>
43 : SI::detail::unit_symbol_impl<'l', 'x'> {};
44
45template <typename _ratio>
46struct unit_symbol<'i', _ratio>
47 : SI::detail::unit_symbol_impl<SI::detail::ratio_prefix<_ratio>::value, 'l',
48 'x'> {};
49
50namespace detail {
52} // namespace detail
53
54inline namespace literals {
55template <char... _digits> constexpr atto_lux_t<int64_t> operator""_alx() {
56 return atto_lux_t<int64_t>{SI::detail::parsing::Number<_digits...>::value};
57}
58
59template <char... _digits> constexpr femto_lux_t<int64_t> operator""_flx() {
60 return femto_lux_t<int64_t>{SI::detail::parsing::Number<_digits...>::value};
61}
62
63template <char... _digits> constexpr pico_lux_t<int64_t> operator""_plx() {
64 return pico_lux_t<int64_t>{SI::detail::parsing::Number<_digits...>::value};
65}
66
67template <char... _digits> constexpr nano_lux_t<int64_t> operator""_nlx() {
68 return nano_lux_t<int64_t>{SI::detail::parsing::Number<_digits...>::value};
69}
70
71template <char... _digits> constexpr micro_lux_t<int64_t> operator""_ulx() {
72 return micro_lux_t<int64_t>{SI::detail::parsing::Number<_digits...>::value};
73}
74
75template <char... _digits> constexpr milli_lux_t<int64_t> operator""_mlx() {
76 return milli_lux_t<int64_t>{SI::detail::parsing::Number<_digits...>::value};
77}
78
79template <char... _digits> constexpr lux_t<int64_t> operator""_lx() {
80 return lux_t<int64_t>{SI::detail::parsing::Number<_digits...>::value};
81}
82
83template <char... _digits> constexpr kilo_lux_t<int64_t> operator""_klx() {
84 return kilo_lux_t<int64_t>{SI::detail::parsing::Number<_digits...>::value};
85}
86
87template <char... _digits> constexpr mega_lux_t<int64_t> operator""_Mlx() {
88 return mega_lux_t<int64_t>{SI::detail::parsing::Number<_digits...>::value};
89}
90
91template <char... _digits> constexpr giga_lux_t<int64_t> operator""_Glx() {
92 return giga_lux_t<int64_t>{SI::detail::parsing::Number<_digits...>::value};
93}
94
95template <char... _digits> constexpr tera_lux_t<int64_t> operator""_Tlx() {
96 return tera_lux_t<int64_t>{SI::detail::parsing::Number<_digits...>::value};
97}
98
99template <char... _digits> constexpr peta_lux_t<int64_t> operator""_Plx() {
100 return peta_lux_t<int64_t>{SI::detail::parsing::Number<_digits...>::value};
101}
102
103template <char... _digits> constexpr exa_lux_t<int64_t> operator""_Elx() {
104 return exa_lux_t<int64_t>{SI::detail::parsing::Number<_digits...>::value};
105}
106
107constexpr atto_lux_t<long double> operator""_alx(long double value) {
108 return atto_lux_t<long double>{value};
109}
110
111constexpr femto_lux_t<long double> operator""_flx(long double value) {
112 return femto_lux_t<long double>{value};
113}
114
115constexpr pico_lux_t<long double> operator""_plx(long double value) {
116 return pico_lux_t<long double>{value};
117}
118
119constexpr nano_lux_t<long double> operator""_nlx(long double value) {
120 return nano_lux_t<long double>{value};
121}
122
123constexpr micro_lux_t<long double> operator""_ulx(long double value) {
124 return micro_lux_t<long double>{value};
125}
126
127constexpr milli_lux_t<long double> operator""_mlx(long double value) {
128 return milli_lux_t<long double>{value};
129}
130
131constexpr lux_t<long double> operator""_lx(long double value) {
132 return lux_t<long double>{value};
133}
134
135constexpr kilo_lux_t<long double> operator""_klx(long double value) {
136 return kilo_lux_t<long double>{value};
137}
138
139constexpr mega_lux_t<long double> operator""_Mlx(long double value) {
140 return mega_lux_t<long double>{value};
141}
142
143constexpr giga_lux_t<long double> operator""_Glx(long double value) {
144 return giga_lux_t<long double>{value};
145}
146
147constexpr tera_lux_t<long double> operator""_Tlx(long double value) {
148 return tera_lux_t<long double>{value};
149}
150
151constexpr peta_lux_t<long double> operator""_Plx(long double value) {
152 return peta_lux_t<long double>{value};
153}
154
155constexpr exa_lux_t<long double> operator""_Elx(long double value) {
156 return exa_lux_t<long double>{value};
157}
158
159} // namespace literals
160} // namespace SI
Definition absorbed_dose.h:18
#define BUILD_UNIT_FROM_DIVISION(RESULTING_UNIT_T, DIVIDEND_UNIT_T, DIVISOR_UNIT_T)
Definition operator_helpers.h:22
interface class for number
Definition number_parser.h:111
Compile time string provider for conversion of unit types to strings.
Definition unit_symbol.h:21
base template class for holding values of type _type to be multiplied with a ratio _ratio
Definition unit.h:51
Base struct. Unusable needs template overloading.
Definition unit_symbol.h:64