master
ブランチ master
VulkanExample / dep / include / glm / detail / type_vec1.inl
13.8 KB、535行 生 Blame 履歴
1/// @ref core
2
3#include "./compute_vector_relational.hpp"
4
5namespace glm
6{
7 // -- Implicit basic constructors --
8
9# if GLM_CONFIG_CTOR_INIT == GLM_ENABLE
10 template<typename T, qualifier Q>
11 GLM_DEFAULTED_DEFAULT_CTOR_QUALIFIER GLM_CONSTEXPR vec<1, T, Q>::vec()
12 : x(0)
13 {}
14# endif
15
16 template<typename T, qualifier Q>
17 template<qualifier P>
18 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q>::vec(vec<1, T, P> const& v)
19 : x(v.x)
20 {}
21
22 // -- Explicit basic constructors --
23
24 template<typename T, qualifier Q>
25 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q>::vec(T scalar)
26 : x(scalar)
27 {}
28
29 // -- Conversion vector constructors --
30
31 template<typename T, qualifier Q>
32 template<typename U, qualifier P>
33 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q>::vec(vec<1, U, P> const& v)
34 : x(static_cast<T>(v.x))
35 {}
36
37 template<typename T, qualifier Q>
38 template<typename U, qualifier P>
39 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q>::vec(vec<2, U, P> const& v)
40 : x(static_cast<T>(v.x))
41 {}
42
43 template<typename T, qualifier Q>
44 template<typename U, qualifier P>
45 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q>::vec(vec<3, U, P> const& v)
46 : x(static_cast<T>(v.x))
47 {}
48
49 template<typename T, qualifier Q>
50 template<typename U, qualifier P>
51 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q>::vec(vec<4, U, P> const& v)
52 : x(static_cast<T>(v.x))
53 {}
54
55 // -- Component accesses --
56
57 template<typename T, qualifier Q>
58 GLM_FUNC_QUALIFIER GLM_CONSTEXPR T & vec<1, T, Q>::operator[](typename vec<1, T, Q>::length_type)
59 {
60 return x;
61 }
62
63 template<typename T, qualifier Q>
64 GLM_FUNC_QUALIFIER GLM_CONSTEXPR T const& vec<1, T, Q>::operator[](typename vec<1, T, Q>::length_type) const
65 {
66 return x;
67 }
68
69 // -- Unary arithmetic operators --
70
71 template<typename T, qualifier Q>
72 template<typename U>
73 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator=(vec<1, U, Q> const& v)
74 {
75 this->x = static_cast<T>(v.x);
76 return *this;
77 }
78
79 template<typename T, qualifier Q>
80 template<typename U>
81 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator+=(U scalar)
82 {
83 this->x += static_cast<T>(scalar);
84 return *this;
85 }
86
87 template<typename T, qualifier Q>
88 template<typename U>
89 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator+=(vec<1, U, Q> const& v)
90 {
91 this->x += static_cast<T>(v.x);
92 return *this;
93 }
94
95 template<typename T, qualifier Q>
96 template<typename U>
97 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator-=(U scalar)
98 {
99 this->x -= static_cast<T>(scalar);
100 return *this;
101 }
102
103 template<typename T, qualifier Q>
104 template<typename U>
105 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator-=(vec<1, U, Q> const& v)
106 {
107 this->x -= static_cast<T>(v.x);
108 return *this;
109 }
110
111 template<typename T, qualifier Q>
112 template<typename U>
113 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator*=(U scalar)
114 {
115 this->x *= static_cast<T>(scalar);
116 return *this;
117 }
118
119 template<typename T, qualifier Q>
120 template<typename U>
121 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator*=(vec<1, U, Q> const& v)
122 {
123 this->x *= static_cast<T>(v.x);
124 return *this;
125 }
126
127 template<typename T, qualifier Q>
128 template<typename U>
129 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator/=(U scalar)
130 {
131 this->x /= static_cast<T>(scalar);
132 return *this;
133 }
134
135 template<typename T, qualifier Q>
136 template<typename U>
137 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator/=(vec<1, U, Q> const& v)
138 {
139 this->x /= static_cast<T>(v.x);
140 return *this;
141 }
142
143 // -- Increment and decrement operators --
144
145 template<typename T, qualifier Q>
146 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator++()
147 {
148 ++this->x;
149 return *this;
150 }
151
152 template<typename T, qualifier Q>
153 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator--()
154 {
155 --this->x;
156 return *this;
157 }
158
159 template<typename T, qualifier Q>
160 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> vec<1, T, Q>::operator++(int)
161 {
162 vec<1, T, Q> Result(*this);
163 ++*this;
164 return Result;
165 }
166
167 template<typename T, qualifier Q>
168 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> vec<1, T, Q>::operator--(int)
169 {
170 vec<1, T, Q> Result(*this);
171 --*this;
172 return Result;
173 }
174
175 // -- Unary bit operators --
176
177 template<typename T, qualifier Q>
178 template<typename U>
179 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator%=(U scalar)
180 {
181 this->x %= static_cast<T>(scalar);
182 return *this;
183 }
184
185 template<typename T, qualifier Q>
186 template<typename U>
187 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator%=(vec<1, U, Q> const& v)
188 {
189 this->x %= static_cast<T>(v.x);
190 return *this;
191 }
192
193 template<typename T, qualifier Q>
194 template<typename U>
195 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator&=(U scalar)
196 {
197 this->x &= static_cast<T>(scalar);
198 return *this;
199 }
200
201 template<typename T, qualifier Q>
202 template<typename U>
203 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator&=(vec<1, U, Q> const& v)
204 {
205 this->x &= static_cast<T>(v.x);
206 return *this;
207 }
208
209 template<typename T, qualifier Q>
210 template<typename U>
211 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator|=(U scalar)
212 {
213 this->x |= static_cast<T>(scalar);
214 return *this;
215 }
216
217 template<typename T, qualifier Q>
218 template<typename U>
219 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator|=(vec<1, U, Q> const& v)
220 {
221 this->x |= static_cast<T>(v.x);
222 return *this;
223 }
224
225 template<typename T, qualifier Q>
226 template<typename U>
227 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator^=(U scalar)
228 {
229 this->x ^= static_cast<T>(scalar);
230 return *this;
231 }
232
233 template<typename T, qualifier Q>
234 template<typename U>
235 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator^=(vec<1, U, Q> const& v)
236 {
237 this->x ^= static_cast<T>(v.x);
238 return *this;
239 }
240
241 template<typename T, qualifier Q>
242 template<typename U>
243 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator<<=(U scalar)
244 {
245 this->x <<= static_cast<T>(scalar);
246 return *this;
247 }
248
249 template<typename T, qualifier Q>
250 template<typename U>
251 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator<<=(vec<1, U, Q> const& v)
252 {
253 this->x <<= static_cast<T>(v.x);
254 return *this;
255 }
256
257 template<typename T, qualifier Q>
258 template<typename U>
259 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator>>=(U scalar)
260 {
261 this->x >>= static_cast<T>(scalar);
262 return *this;
263 }
264
265 template<typename T, qualifier Q>
266 template<typename U>
267 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator>>=(vec<1, U, Q> const& v)
268 {
269 this->x >>= static_cast<T>(v.x);
270 return *this;
271 }
272
273 // -- Unary constant operators --
274
275 template<typename T, qualifier Q>
276 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator+(vec<1, T, Q> const& v)
277 {
278 return v;
279 }
280
281 template<typename T, qualifier Q>
282 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator-(vec<1, T, Q> const& v)
283 {
284 return vec<1, T, Q>(
285 -v.x);
286 }
287
288 // -- Binary arithmetic operators --
289
290 template<typename T, qualifier Q>
291 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator+(vec<1, T, Q> const& v, T scalar)
292 {
293 return vec<1, T, Q>(
294 v.x + scalar);
295 }
296
297 template<typename T, qualifier Q>
298 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator+(T scalar, vec<1, T, Q> const& v)
299 {
300 return vec<1, T, Q>(
301 scalar + v.x);
302 }
303
304 template<typename T, qualifier Q>
305 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator+(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2)
306 {
307 return vec<1, T, Q>(
308 v1.x + v2.x);
309 }
310
311 //operator-
312 template<typename T, qualifier Q>
313 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator-(vec<1, T, Q> const& v, T scalar)
314 {
315 return vec<1, T, Q>(
316 v.x - scalar);
317 }
318
319 template<typename T, qualifier Q>
320 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator-(T scalar, vec<1, T, Q> const& v)
321 {
322 return vec<1, T, Q>(
323 scalar - v.x);
324 }
325
326 template<typename T, qualifier Q>
327 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator-(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2)
328 {
329 return vec<1, T, Q>(
330 v1.x - v2.x);
331 }
332
333 template<typename T, qualifier Q>
334 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator*(vec<1, T, Q> const& v, T scalar)
335 {
336 return vec<1, T, Q>(
337 v.x * scalar);
338 }
339
340 template<typename T, qualifier Q>
341 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator*(T scalar, vec<1, T, Q> const& v)
342 {
343 return vec<1, T, Q>(
344 scalar * v.x);
345 }
346
347 template<typename T, qualifier Q>
348 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator*(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2)
349 {
350 return vec<1, T, Q>(
351 v1.x * v2.x);
352 }
353
354 template<typename T, qualifier Q>
355 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator/(vec<1, T, Q> const& v, T scalar)
356 {
357 return vec<1, T, Q>(
358 v.x / scalar);
359 }
360
361 template<typename T, qualifier Q>
362 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator/(T scalar, vec<1, T, Q> const& v)
363 {
364 return vec<1, T, Q>(
365 scalar / v.x);
366 }
367
368 template<typename T, qualifier Q>
369 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator/(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2)
370 {
371 return vec<1, T, Q>(
372 v1.x / v2.x);
373 }
374
375 // -- Binary bit operators --
376
377 template<typename T, qualifier Q>
378 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator%(vec<1, T, Q> const& v, T scalar)
379 {
380 return vec<1, T, Q>(
381 v.x % scalar);
382 }
383
384 template<typename T, qualifier Q>
385 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator%(T scalar, vec<1, T, Q> const& v)
386 {
387 return vec<1, T, Q>(
388 scalar % v.x);
389 }
390
391 template<typename T, qualifier Q>
392 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator%(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2)
393 {
394 return vec<1, T, Q>(
395 v1.x % v2.x);
396 }
397
398 template<typename T, qualifier Q>
399 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator&(vec<1, T, Q> const& v, T scalar)
400 {
401 return vec<1, T, Q>(
402 v.x & scalar);
403 }
404
405 template<typename T, qualifier Q>
406 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator&(T scalar, vec<1, T, Q> const& v)
407 {
408 return vec<1, T, Q>(
409 scalar & v.x);
410 }
411
412 template<typename T, qualifier Q>
413 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator&(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2)
414 {
415 return vec<1, T, Q>(
416 v1.x & v2.x);
417 }
418
419 template<typename T, qualifier Q>
420 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator|(vec<1, T, Q> const& v, T scalar)
421 {
422 return vec<1, T, Q>(
423 v.x | scalar);
424 }
425
426 template<typename T, qualifier Q>
427 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator|(T scalar, vec<1, T, Q> const& v)
428 {
429 return vec<1, T, Q>(
430 scalar | v.x);
431 }
432
433 template<typename T, qualifier Q>
434 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator|(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2)
435 {
436 return vec<1, T, Q>(
437 v1.x | v2.x);
438 }
439
440 template<typename T, qualifier Q>
441 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator^(vec<1, T, Q> const& v, T scalar)
442 {
443 return vec<1, T, Q>(
444 v.x ^ scalar);
445 }
446
447 template<typename T, qualifier Q>
448 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator^(T scalar, vec<1, T, Q> const& v)
449 {
450 return vec<1, T, Q>(
451 scalar ^ v.x);
452 }
453
454 template<typename T, qualifier Q>
455 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator^(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2)
456 {
457 return vec<1, T, Q>(
458 v1.x ^ v2.x);
459 }
460
461 template<typename T, qualifier Q>
462 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator<<(vec<1, T, Q> const& v, T scalar)
463 {
464 return vec<1, T, Q>(
465 static_cast<T>(v.x << scalar));
466 }
467
468 template<typename T, qualifier Q>
469 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator<<(T scalar, vec<1, T, Q> const& v)
470 {
471 return vec<1, T, Q>(
472 static_cast<T>(scalar << v.x));
473 }
474
475 template<typename T, qualifier Q>
476 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator<<(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2)
477 {
478 return vec<1, T, Q>(
479 static_cast<T>(v1.x << v2.x));
480 }
481
482 template<typename T, qualifier Q>
483 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator>>(vec<1, T, Q> const& v, T scalar)
484 {
485 return vec<1, T, Q>(
486 static_cast<T>(v.x >> scalar));
487 }
488
489 template<typename T, qualifier Q>
490 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator>>(T scalar, vec<1, T, Q> const& v)
491 {
492 return vec<1, T, Q>(
493 static_cast<T>(scalar >> v.x));
494 }
495
496 template<typename T, qualifier Q>
497 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator>>(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2)
498 {
499 return vec<1, T, Q>(
500 static_cast<T>(v1.x >> v2.x));
501 }
502
503 template<typename T, qualifier Q>
504 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator~(vec<1, T, Q> const& v)
505 {
506 return vec<1, T, Q>(
507 ~v.x);
508 }
509
510 // -- Boolean operators --
511
512 template<typename T, qualifier Q>
513 GLM_FUNC_QUALIFIER GLM_CONSTEXPR bool operator==(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2)
514 {
515 return detail::compute_equal<T, std::numeric_limits<T>::is_iec559>::call(v1.x, v2.x);
516 }
517
518 template<typename T, qualifier Q>
519 GLM_FUNC_QUALIFIER GLM_CONSTEXPR bool operator!=(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2)
520 {
521 return !(v1 == v2);
522 }
523
524 template<qualifier Q>
525 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, bool, Q> operator&&(vec<1, bool, Q> const& v1, vec<1, bool, Q> const& v2)
526 {
527 return vec<1, bool, Q>(v1.x && v2.x);
528 }
529
530 template<qualifier Q>
531 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, bool, Q> operator||(vec<1, bool, Q> const& v1, vec<1, bool, Q> const& v2)
532 {
533 return vec<1, bool, Q>(v1.x || v2.x);
534 }
535}//namespace glm