src/basics.h

changeset 96
165777a20dc7
parent 92
c438a7db7c52
child 148
e1ced2523cad
equal deleted inserted replaced
95:06a1aef170aa 96:165777a20dc7
21 #include <cstdio> 21 #include <cstdio>
22 #include <cstdlib> 22 #include <cstdlib>
23 #include <cstring> 23 #include <cstring>
24 #include <cmath> 24 #include <cmath>
25 #include <optional> 25 #include <optional>
26 #include <type_traits>
26 #include <QMatrix4x4> 27 #include <QMatrix4x4>
27 #include <QObject> 28 #include <QObject>
28 #include <QPointF> 29 #include <QPointF>
29 #include <QSet> 30 #include <QSet>
30 #include <QString> 31 #include <QString>
160 inline glm::vec2 toVec2(const QPointF& point) 161 inline glm::vec2 toVec2(const QPointF& point)
161 { 162 {
162 return {point.x(), point.y()}; 163 return {point.x(), point.y()};
163 } 164 }
164 165
165 constexpr float PIf = static_cast<float>(M_PI); 166 /*
166 constexpr double PI = M_PI; 167 * coalesce(arg1, arg2, ..., argn)
167 constexpr long double PIl = M_PIl; 168 * Returns the first of the given arguments that evaluates to true.
169 */
170 template<typename T>
171 T coalesce(T&& arg)
172 {
173 // recursion base: 1 argument
174 return arg;
175 }
176
177 template<typename T, typename... Rest>
178 std::common_type_t<T, Rest...> coalesce(T&& arg, Rest&&... rest)
179 {
180 // general case: n arguments
181 return arg ? arg : coalesce(rest...);
182 }
183
184 template<typename T = double>
185 constexpr std::enable_if_t<std::is_floating_point_v<T>, T> PI = static_cast<T>(M_PIl);
168 186
169 Q_DECLARE_METATYPE(glm::vec3) 187 Q_DECLARE_METATYPE(glm::vec3)
170 Q_DECLARE_METATYPE(glm::mat4) 188 Q_DECLARE_METATYPE(glm::mat4)

mercurial