Clutter Engine 0.0.1
Loading...
Searching...
No Matches
scalar_common.inl
1namespace glm
2{
3 template<typename T>
4 GLM_FUNC_QUALIFIER T min(T a, T b, T c)
5 {
6 return glm::min(glm::min(a, b), c);
7 }
8
9 template<typename T>
10 GLM_FUNC_QUALIFIER T min(T a, T b, T c, T d)
11 {
12 return glm::min(glm::min(a, b), glm::min(c, d));
13 }
14
15 template<typename T>
16 GLM_FUNC_QUALIFIER T max(T a, T b, T c)
17 {
18 return glm::max(glm::max(a, b), c);
19 }
20
21 template<typename T>
22 GLM_FUNC_QUALIFIER T max(T a, T b, T c, T d)
23 {
24 return glm::max(glm::max(a, b), glm::max(c, d));
25 }
26
27# if GLM_HAS_CXX11_STL
28 using std::fmin;
29# else
30 template<typename T>
31 GLM_FUNC_QUALIFIER T fmin(T a, T b)
32 {
33 GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'fmin' only accept floating-point input");
34
35 if (isnan(a))
36 return b;
37 return min(a, b);
38 }
39# endif
40
41 template<typename T>
42 GLM_FUNC_QUALIFIER T fmin(T a, T b, T c)
43 {
44 GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'fmin' only accept floating-point input");
45
46 if (isnan(a))
47 return fmin(b, c);
48 if (isnan(b))
49 return fmin(a, c);
50 if (isnan(c))
51 return min(a, b);
52 return min(a, b, c);
53 }
54
55 template<typename T>
56 GLM_FUNC_QUALIFIER T fmin(T a, T b, T c, T d)
57 {
58 GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'fmin' only accept floating-point input");
59
60 if (isnan(a))
61 return fmin(b, c, d);
62 if (isnan(b))
63 return min(a, fmin(c, d));
64 if (isnan(c))
65 return fmin(min(a, b), d);
66 if (isnan(d))
67 return min(a, b, c);
68 return min(a, b, c, d);
69 }
70
71
72# if GLM_HAS_CXX11_STL
73 using std::fmax;
74# else
75 template<typename T>
76 GLM_FUNC_QUALIFIER T fmax(T a, T b)
77 {
78 GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'fmax' only accept floating-point input");
79
80 if (isnan(a))
81 return b;
82 return max(a, b);
83 }
84# endif
85
86 template<typename T>
87 GLM_FUNC_QUALIFIER T fmax(T a, T b, T c)
88 {
89 GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'fmax' only accept floating-point input");
90
91 if (isnan(a))
92 return fmax(b, c);
93 if (isnan(b))
94 return fmax(a, c);
95 if (isnan(c))
96 return max(a, b);
97 return max(a, b, c);
98 }
99
100 template<typename T>
101 GLM_FUNC_QUALIFIER T fmax(T a, T b, T c, T d)
102 {
103 GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'fmax' only accept floating-point input");
104
105 if (isnan(a))
106 return fmax(b, c, d);
107 if (isnan(b))
108 return max(a, fmax(c, d));
109 if (isnan(c))
110 return fmax(max(a, b), d);
111 if (isnan(d))
112 return max(a, b, c);
113 return max(a, b, c, d);
114 }
115}//namespace glm
GLM_FUNC_DECL GLM_CONSTEXPR genType min(genType x, genType y)
Definition func_common.inl:17
GLM_FUNC_DECL vec< L, bool, Q > isnan(vec< L, T, Q > const &x)
Definition func_common.inl:613
GLM_FUNC_DECL GLM_CONSTEXPR genType max(genType x, genType y)
Definition func_common.inl:25
GLM_FUNC_DECL T fmax(T a, T b)
Definition scalar_common.inl:76
GLM_FUNC_DECL T fmin(T a, T b)
Definition scalar_common.inl:31
Core features
Definition common.hpp:21