Clutter Engine 0.0.1
Loading...
Searching...
No Matches
extended_min_max.inl
1
2
3namespace glm
4{
5 template<typename T>
6 GLM_FUNC_QUALIFIER T min(
7 T const& x,
8 T const& y,
9 T const& z)
10 {
11 return glm::min(glm::min(x, y), z);
12 }
13
14 template<typename T, template<typename> class C>
15 GLM_FUNC_QUALIFIER C<T> min
16 (
17 C<T> const& x,
18 typename C<T>::T const& y,
19 typename C<T>::T const& z
20 )
21 {
22 return glm::min(glm::min(x, y), z);
23 }
24
25 template<typename T, template<typename> class C>
26 GLM_FUNC_QUALIFIER C<T> min
27 (
28 C<T> const& x,
29 C<T> const& y,
30 C<T> const& z
31 )
32 {
33 return glm::min(glm::min(x, y), z);
34 }
35
36 template<typename T>
37 GLM_FUNC_QUALIFIER T min
38 (
39 T const& x,
40 T const& y,
41 T const& z,
42 T const& w
43 )
44 {
45 return glm::min(glm::min(x, y), glm::min(z, w));
46 }
47
48 template<typename T, template<typename> class C>
49 GLM_FUNC_QUALIFIER C<T> min
50 (
51 C<T> const& x,
52 typename C<T>::T const& y,
53 typename C<T>::T const& z,
54 typename C<T>::T const& w
55 )
56 {
57 return glm::min(glm::min(x, y), glm::min(z, w));
58 }
59
60 template<typename T, template<typename> class C>
61 GLM_FUNC_QUALIFIER C<T> min
62 (
63 C<T> const& x,
64 C<T> const& y,
65 C<T> const& z,
66 C<T> const& w
67 )
68 {
69 return glm::min(glm::min(x, y), glm::min(z, w));
70 }
71
72 template<typename T>
73 GLM_FUNC_QUALIFIER T max(
74 T const& x,
75 T const& y,
76 T const& z)
77 {
78 return glm::max(glm::max(x, y), z);
79 }
80
81 template<typename T, template<typename> class C>
82 GLM_FUNC_QUALIFIER C<T> max
83 (
84 C<T> const& x,
85 typename C<T>::T const& y,
86 typename C<T>::T const& z
87 )
88 {
89 return glm::max(glm::max(x, y), z);
90 }
91
92 template<typename T, template<typename> class C>
93 GLM_FUNC_QUALIFIER C<T> max
94 (
95 C<T> const& x,
96 C<T> const& y,
97 C<T> const& z
98 )
99 {
100 return glm::max(glm::max(x, y), z);
101 }
102
103 template<typename T>
104 GLM_FUNC_QUALIFIER T max
105 (
106 T const& x,
107 T const& y,
108 T const& z,
109 T const& w
110 )
111 {
112 return glm::max(glm::max(x, y), glm::max(z, w));
113 }
114
115 template<typename T, template<typename> class C>
116 GLM_FUNC_QUALIFIER C<T> max
117 (
118 C<T> const& x,
119 typename C<T>::T const& y,
120 typename C<T>::T const& z,
121 typename C<T>::T const& w
122 )
123 {
124 return glm::max(glm::max(x, y), glm::max(z, w));
125 }
126
127 template<typename T, template<typename> class C>
128 GLM_FUNC_QUALIFIER C<T> max
129 (
130 C<T> const& x,
131 C<T> const& y,
132 C<T> const& z,
133 C<T> const& w
134 )
135 {
136 return glm::max(glm::max(x, y), glm::max(z, w));
137 }
138
139 // fmin
140# if GLM_HAS_CXX11_STL
141 using std::fmin;
142# else
143 template<typename genType>
144 GLM_FUNC_QUALIFIER genType fmin(genType x, genType y)
145 {
146 GLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, "'fmin' only accept floating-point input");
147
148 if (isnan(x))
149 return y;
150 if (isnan(y))
151 return x;
152
153 return min(x, y);
154 }
155# endif
156
157 template<length_t L, typename T, qualifier Q>
158 GLM_FUNC_QUALIFIER vec<L, T, Q> fmin(vec<L, T, Q> const& a, T b)
159 {
160 return detail::functor2<vec, L, T, Q>::call(fmin, a, vec<L, T, Q>(b));
161 }
162
163 template<length_t L, typename T, qualifier Q>
164 GLM_FUNC_QUALIFIER vec<L, T, Q> fmin(vec<L, T, Q> const& a, vec<L, T, Q> const& b)
165 {
166 return detail::functor2<vec, L, T, Q>::call(fmin, a, b);
167 }
168
169 // fmax
170# if GLM_HAS_CXX11_STL
171 using std::fmax;
172# else
173 template<typename genType>
174 GLM_FUNC_QUALIFIER genType fmax(genType x, genType y)
175 {
176 GLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, "'fmax' only accept floating-point input");
177
178 if (isnan(x))
179 return y;
180 if (isnan(y))
181 return x;
182
183 return max(x, y);
184 }
185# endif
186
187 template<length_t L, typename T, qualifier Q>
188 GLM_FUNC_QUALIFIER vec<L, T, Q> fmax(vec<L, T, Q> const& a, T b)
189 {
190 return detail::functor2<vec, L, T, Q>::call(fmax, a, vec<L, T, Q>(b));
191 }
192
193 template<length_t L, typename T, qualifier Q>
194 GLM_FUNC_QUALIFIER vec<L, T, Q> fmax(vec<L, T, Q> const& a, vec<L, T, Q> const& b)
195 {
196 return detail::functor2<vec, L, T, Q>::call(fmax, a, b);
197 }
198
199 // fclamp
200 template<typename genType>
201 GLM_FUNC_QUALIFIER genType fclamp(genType x, genType minVal, genType maxVal)
202 {
203 GLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, "'fclamp' only accept floating-point or integer inputs");
204 return fmin(fmax(x, minVal), maxVal);
205 }
206
207 template<length_t L, typename T, qualifier Q>
208 GLM_FUNC_QUALIFIER vec<L, T, Q> fclamp(vec<L, T, Q> const& x, T minVal, T maxVal)
209 {
210 return fmin(fmax(x, vec<L, T, Q>(minVal)), vec<L, T, Q>(maxVal));
211 }
212
213 template<length_t L, typename T, qualifier Q>
214 GLM_FUNC_QUALIFIER vec<L, T, Q> fclamp(vec<L, T, Q> const& x, vec<L, T, Q> const& minVal, vec<L, T, Q> const& maxVal)
215 {
216 return fmin(fmax(x, minVal), maxVal);
217 }
218}//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
GLM_FUNC_DECL genType fclamp(genType x, genType minVal, genType maxVal)
Definition extended_min_max.inl:201
Core features
Definition common.hpp:21
Definition qualifier.hpp:35