Clutter Engine 0.0.1
Loading...
Searching...
No Matches
type_vec2.inl
1
2
3#include "./compute_vector_relational.hpp"
4
5namespace glm
6{
7 // -- Implicit basic constructors --
8
9# if GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_DISABLE
10 template<typename T, qualifier Q>
11 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q>::vec()
12# if GLM_CONFIG_CTOR_INIT != GLM_CTOR_INIT_DISABLE
13 : x(0), y(0)
14# endif
15 {}
16
17 template<typename T, qualifier Q>
18 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q>::vec(vec<2, T, Q> const& v)
19 : x(v.x), y(v.y)
20 {}
21# endif
22
23 template<typename T, qualifier Q>
24 template<qualifier P>
25 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q>::vec(vec<2, T, P> const& v)
26 : x(v.x), y(v.y)
27 {}
28
29 // -- Explicit basic constructors --
30
31 template<typename T, qualifier Q>
32 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q>::vec(T scalar)
33 : x(scalar), y(scalar)
34 {}
35
36 template<typename T, qualifier Q>
37 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q>::vec(T _x, T _y)
38 : x(_x), y(_y)
39 {}
40
41 // -- Conversion scalar constructors --
42
43 template<typename T, qualifier Q>
44 template<typename U, qualifier P>
45 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q>::vec(vec<1, U, P> const& v)
46 : x(static_cast<T>(v.x))
47 , y(static_cast<T>(v.x))
48 {}
49
50 template<typename T, qualifier Q>
51 template<typename A, typename B>
52 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q>::vec(A _x, B _y)
53 : x(static_cast<T>(_x))
54 , y(static_cast<T>(_y))
55 {}
56
57 template<typename T, qualifier Q>
58 template<typename A, typename B>
59 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q>::vec(vec<1, A, Q> const& _x, B _y)
60 : x(static_cast<T>(_x.x))
61 , y(static_cast<T>(_y))
62 {}
63
64 template<typename T, qualifier Q>
65 template<typename A, typename B>
66 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q>::vec(A _x, vec<1, B, Q> const& _y)
67 : x(static_cast<T>(_x))
68 , y(static_cast<T>(_y.x))
69 {}
70
71 template<typename T, qualifier Q>
72 template<typename A, typename B>
73 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q>::vec(vec<1, A, Q> const& _x, vec<1, B, Q> const& _y)
74 : x(static_cast<T>(_x.x))
75 , y(static_cast<T>(_y.x))
76 {}
77
78 // -- Conversion vector constructors --
79
80 template<typename T, qualifier Q>
81 template<typename U, qualifier P>
82 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q>::vec(vec<2, U, P> const& v)
83 : x(static_cast<T>(v.x))
84 , y(static_cast<T>(v.y))
85 {}
86
87 template<typename T, qualifier Q>
88 template<typename U, qualifier P>
89 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q>::vec(vec<3, U, P> const& v)
90 : x(static_cast<T>(v.x))
91 , y(static_cast<T>(v.y))
92 {}
93
94 template<typename T, qualifier Q>
95 template<typename U, qualifier P>
96 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q>::vec(vec<4, U, P> const& v)
97 : x(static_cast<T>(v.x))
98 , y(static_cast<T>(v.y))
99 {}
100
101 // -- Component accesses --
102
103 template<typename T, qualifier Q>
104 GLM_FUNC_QUALIFIER GLM_CONSTEXPR T & vec<2, T, Q>::operator[](typename vec<2, T, Q>::length_type i)
105 {
106 assert(i >= 0 && i < this->length());
107 switch(i)
108 {
109 default:
110 case 0:
111 return x;
112 case 1:
113 return y;
114 }
115 }
116
117 template<typename T, qualifier Q>
118 GLM_FUNC_QUALIFIER GLM_CONSTEXPR T const& vec<2, T, Q>::operator[](typename vec<2, T, Q>::length_type i) const
119 {
120 assert(i >= 0 && i < this->length());
121 switch(i)
122 {
123 default:
124 case 0:
125 return x;
126 case 1:
127 return y;
128 }
129 }
130
131 // -- Unary arithmetic operators --
132
133# if GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_DISABLE
134 template<typename T, qualifier Q>
135 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator=(vec<2, T, Q> const& v)
136 {
137 this->x = v.x;
138 this->y = v.y;
139 return *this;
140 }
141# endif
142
143 template<typename T, qualifier Q>
144 template<typename U>
145 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator=(vec<2, U, Q> const& v)
146 {
147 this->x = static_cast<T>(v.x);
148 this->y = static_cast<T>(v.y);
149 return *this;
150 }
151
152 template<typename T, qualifier Q>
153 template<typename U>
154 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator+=(U scalar)
155 {
156 this->x += static_cast<T>(scalar);
157 this->y += static_cast<T>(scalar);
158 return *this;
159 }
160
161 template<typename T, qualifier Q>
162 template<typename U>
163 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator+=(vec<1, U, Q> const& v)
164 {
165 this->x += static_cast<T>(v.x);
166 this->y += static_cast<T>(v.x);
167 return *this;
168 }
169
170 template<typename T, qualifier Q>
171 template<typename U>
172 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator+=(vec<2, U, Q> const& v)
173 {
174 this->x += static_cast<T>(v.x);
175 this->y += static_cast<T>(v.y);
176 return *this;
177 }
178
179 template<typename T, qualifier Q>
180 template<typename U>
181 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator-=(U scalar)
182 {
183 this->x -= static_cast<T>(scalar);
184 this->y -= static_cast<T>(scalar);
185 return *this;
186 }
187
188 template<typename T, qualifier Q>
189 template<typename U>
190 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator-=(vec<1, U, Q> const& v)
191 {
192 this->x -= static_cast<T>(v.x);
193 this->y -= static_cast<T>(v.x);
194 return *this;
195 }
196
197 template<typename T, qualifier Q>
198 template<typename U>
199 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator-=(vec<2, U, Q> const& v)
200 {
201 this->x -= static_cast<T>(v.x);
202 this->y -= static_cast<T>(v.y);
203 return *this;
204 }
205
206 template<typename T, qualifier Q>
207 template<typename U>
208 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator*=(U scalar)
209 {
210 this->x *= static_cast<T>(scalar);
211 this->y *= static_cast<T>(scalar);
212 return *this;
213 }
214
215 template<typename T, qualifier Q>
216 template<typename U>
217 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator*=(vec<1, U, Q> const& v)
218 {
219 this->x *= static_cast<T>(v.x);
220 this->y *= static_cast<T>(v.x);
221 return *this;
222 }
223
224 template<typename T, qualifier Q>
225 template<typename U>
226 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator*=(vec<2, U, Q> const& v)
227 {
228 this->x *= static_cast<T>(v.x);
229 this->y *= static_cast<T>(v.y);
230 return *this;
231 }
232
233 template<typename T, qualifier Q>
234 template<typename U>
235 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator/=(U scalar)
236 {
237 this->x /= static_cast<T>(scalar);
238 this->y /= static_cast<T>(scalar);
239 return *this;
240 }
241
242 template<typename T, qualifier Q>
243 template<typename U>
244 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator/=(vec<1, U, Q> const& v)
245 {
246 this->x /= static_cast<T>(v.x);
247 this->y /= static_cast<T>(v.x);
248 return *this;
249 }
250
251 template<typename T, qualifier Q>
252 template<typename U>
253 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator/=(vec<2, U, Q> const& v)
254 {
255 this->x /= static_cast<T>(v.x);
256 this->y /= static_cast<T>(v.y);
257 return *this;
258 }
259
260 // -- Increment and decrement operators --
261
262 template<typename T, qualifier Q>
263 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator++()
264 {
265 ++this->x;
266 ++this->y;
267 return *this;
268 }
269
270 template<typename T, qualifier Q>
271 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator--()
272 {
273 --this->x;
274 --this->y;
275 return *this;
276 }
277
278 template<typename T, qualifier Q>
279 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> vec<2, T, Q>::operator++(int)
280 {
281 vec<2, T, Q> Result(*this);
282 ++*this;
283 return Result;
284 }
285
286 template<typename T, qualifier Q>
287 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> vec<2, T, Q>::operator--(int)
288 {
289 vec<2, T, Q> Result(*this);
290 --*this;
291 return Result;
292 }
293
294 // -- Unary bit operators --
295
296 template<typename T, qualifier Q>
297 template<typename U>
298 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator%=(U scalar)
299 {
300 this->x %= static_cast<T>(scalar);
301 this->y %= static_cast<T>(scalar);
302 return *this;
303 }
304
305 template<typename T, qualifier Q>
306 template<typename U>
307 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator%=(vec<1, U, Q> const& v)
308 {
309 this->x %= static_cast<T>(v.x);
310 this->y %= static_cast<T>(v.x);
311 return *this;
312 }
313
314 template<typename T, qualifier Q>
315 template<typename U>
316 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator%=(vec<2, U, Q> const& v)
317 {
318 this->x %= static_cast<T>(v.x);
319 this->y %= static_cast<T>(v.y);
320 return *this;
321 }
322
323 template<typename T, qualifier Q>
324 template<typename U>
325 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator&=(U scalar)
326 {
327 this->x &= static_cast<T>(scalar);
328 this->y &= static_cast<T>(scalar);
329 return *this;
330 }
331
332 template<typename T, qualifier Q>
333 template<typename U>
334 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator&=(vec<1, U, Q> const& v)
335 {
336 this->x &= static_cast<T>(v.x);
337 this->y &= static_cast<T>(v.x);
338 return *this;
339 }
340
341 template<typename T, qualifier Q>
342 template<typename U>
343 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator&=(vec<2, U, Q> const& v)
344 {
345 this->x &= static_cast<T>(v.x);
346 this->y &= static_cast<T>(v.y);
347 return *this;
348 }
349
350 template<typename T, qualifier Q>
351 template<typename U>
352 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator|=(U scalar)
353 {
354 this->x |= static_cast<T>(scalar);
355 this->y |= static_cast<T>(scalar);
356 return *this;
357 }
358
359 template<typename T, qualifier Q>
360 template<typename U>
361 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator|=(vec<1, U, Q> const& v)
362 {
363 this->x |= static_cast<T>(v.x);
364 this->y |= static_cast<T>(v.x);
365 return *this;
366 }
367
368 template<typename T, qualifier Q>
369 template<typename U>
370 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator|=(vec<2, U, Q> const& v)
371 {
372 this->x |= static_cast<T>(v.x);
373 this->y |= static_cast<T>(v.y);
374 return *this;
375 }
376
377 template<typename T, qualifier Q>
378 template<typename U>
379 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator^=(U scalar)
380 {
381 this->x ^= static_cast<T>(scalar);
382 this->y ^= static_cast<T>(scalar);
383 return *this;
384 }
385
386 template<typename T, qualifier Q>
387 template<typename U>
388 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator^=(vec<1, U, Q> const& v)
389 {
390 this->x ^= static_cast<T>(v.x);
391 this->y ^= static_cast<T>(v.x);
392 return *this;
393 }
394
395 template<typename T, qualifier Q>
396 template<typename U>
397 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator^=(vec<2, U, Q> const& v)
398 {
399 this->x ^= static_cast<T>(v.x);
400 this->y ^= static_cast<T>(v.y);
401 return *this;
402 }
403
404 template<typename T, qualifier Q>
405 template<typename U>
406 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator<<=(U scalar)
407 {
408 this->x <<= static_cast<T>(scalar);
409 this->y <<= static_cast<T>(scalar);
410 return *this;
411 }
412
413 template<typename T, qualifier Q>
414 template<typename U>
415 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator<<=(vec<1, U, Q> const& v)
416 {
417 this->x <<= static_cast<T>(v.x);
418 this->y <<= static_cast<T>(v.x);
419 return *this;
420 }
421
422 template<typename T, qualifier Q>
423 template<typename U>
424 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator<<=(vec<2, U, Q> const& v)
425 {
426 this->x <<= static_cast<T>(v.x);
427 this->y <<= static_cast<T>(v.y);
428 return *this;
429 }
430
431 template<typename T, qualifier Q>
432 template<typename U>
433 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator>>=(U scalar)
434 {
435 this->x >>= static_cast<T>(scalar);
436 this->y >>= static_cast<T>(scalar);
437 return *this;
438 }
439
440 template<typename T, qualifier Q>
441 template<typename U>
442 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator>>=(vec<1, U, Q> const& v)
443 {
444 this->x >>= static_cast<T>(v.x);
445 this->y >>= static_cast<T>(v.x);
446 return *this;
447 }
448
449 template<typename T, qualifier Q>
450 template<typename U>
451 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator>>=(vec<2, U, Q> const& v)
452 {
453 this->x >>= static_cast<T>(v.x);
454 this->y >>= static_cast<T>(v.y);
455 return *this;
456 }
457
458 // -- Unary arithmetic operators --
459
460 template<typename T, qualifier Q>
461 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator+(vec<2, T, Q> const& v)
462 {
463 return v;
464 }
465
466 template<typename T, qualifier Q>
467 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator-(vec<2, T, Q> const& v)
468 {
469 return vec<2, T, Q>(
470 -v.x,
471 -v.y);
472 }
473
474 // -- Binary arithmetic operators --
475
476 template<typename T, qualifier Q>
477 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator+(vec<2, T, Q> const& v, T scalar)
478 {
479 return vec<2, T, Q>(
480 v.x + scalar,
481 v.y + scalar);
482 }
483
484 template<typename T, qualifier Q>
485 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator+(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2)
486 {
487 return vec<2, T, Q>(
488 v1.x + v2.x,
489 v1.y + v2.x);
490 }
491
492 template<typename T, qualifier Q>
493 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator+(T scalar, vec<2, T, Q> const& v)
494 {
495 return vec<2, T, Q>(
496 scalar + v.x,
497 scalar + v.y);
498 }
499
500 template<typename T, qualifier Q>
501 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator+(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2)
502 {
503 return vec<2, T, Q>(
504 v1.x + v2.x,
505 v1.x + v2.y);
506 }
507
508 template<typename T, qualifier Q>
509 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator+(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2)
510 {
511 return vec<2, T, Q>(
512 v1.x + v2.x,
513 v1.y + v2.y);
514 }
515
516 template<typename T, qualifier Q>
517 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator-(vec<2, T, Q> const& v, T scalar)
518 {
519 return vec<2, T, Q>(
520 v.x - scalar,
521 v.y - scalar);
522 }
523
524 template<typename T, qualifier Q>
525 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator-(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2)
526 {
527 return vec<2, T, Q>(
528 v1.x - v2.x,
529 v1.y - v2.x);
530 }
531
532 template<typename T, qualifier Q>
533 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator-(T scalar, vec<2, T, Q> const& v)
534 {
535 return vec<2, T, Q>(
536 scalar - v.x,
537 scalar - v.y);
538 }
539
540 template<typename T, qualifier Q>
541 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator-(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2)
542 {
543 return vec<2, T, Q>(
544 v1.x - v2.x,
545 v1.x - v2.y);
546 }
547
548 template<typename T, qualifier Q>
549 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator-(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2)
550 {
551 return vec<2, T, Q>(
552 v1.x - v2.x,
553 v1.y - v2.y);
554 }
555
556 template<typename T, qualifier Q>
557 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator*(vec<2, T, Q> const& v, T scalar)
558 {
559 return vec<2, T, Q>(
560 v.x * scalar,
561 v.y * scalar);
562 }
563
564 template<typename T, qualifier Q>
565 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator*(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2)
566 {
567 return vec<2, T, Q>(
568 v1.x * v2.x,
569 v1.y * v2.x);
570 }
571
572 template<typename T, qualifier Q>
573 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator*(T scalar, vec<2, T, Q> const& v)
574 {
575 return vec<2, T, Q>(
576 scalar * v.x,
577 scalar * v.y);
578 }
579
580 template<typename T, qualifier Q>
581 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator*(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2)
582 {
583 return vec<2, T, Q>(
584 v1.x * v2.x,
585 v1.x * v2.y);
586 }
587
588 template<typename T, qualifier Q>
589 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator*(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2)
590 {
591 return vec<2, T, Q>(
592 v1.x * v2.x,
593 v1.y * v2.y);
594 }
595
596 template<typename T, qualifier Q>
597 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator/(vec<2, T, Q> const& v, T scalar)
598 {
599 return vec<2, T, Q>(
600 v.x / scalar,
601 v.y / scalar);
602 }
603
604 template<typename T, qualifier Q>
605 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator/(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2)
606 {
607 return vec<2, T, Q>(
608 v1.x / v2.x,
609 v1.y / v2.x);
610 }
611
612 template<typename T, qualifier Q>
613 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator/(T scalar, vec<2, T, Q> const& v)
614 {
615 return vec<2, T, Q>(
616 scalar / v.x,
617 scalar / v.y);
618 }
619
620 template<typename T, qualifier Q>
621 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator/(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2)
622 {
623 return vec<2, T, Q>(
624 v1.x / v2.x,
625 v1.x / v2.y);
626 }
627
628 template<typename T, qualifier Q>
629 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator/(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2)
630 {
631 return vec<2, T, Q>(
632 v1.x / v2.x,
633 v1.y / v2.y);
634 }
635
636 // -- Binary bit operators --
637
638 template<typename T, qualifier Q>
639 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator%(vec<2, T, Q> const& v, T scalar)
640 {
641 return vec<2, T, Q>(
642 v.x % scalar,
643 v.y % scalar);
644 }
645
646 template<typename T, qualifier Q>
647 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator%(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2)
648 {
649 return vec<2, T, Q>(
650 v1.x % v2.x,
651 v1.y % v2.x);
652 }
653
654 template<typename T, qualifier Q>
655 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator%(T scalar, vec<2, T, Q> const& v)
656 {
657 return vec<2, T, Q>(
658 scalar % v.x,
659 scalar % v.y);
660 }
661
662 template<typename T, qualifier Q>
663 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator%(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2)
664 {
665 return vec<2, T, Q>(
666 v1.x % v2.x,
667 v1.x % v2.y);
668 }
669
670 template<typename T, qualifier Q>
671 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator%(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2)
672 {
673 return vec<2, T, Q>(
674 v1.x % v2.x,
675 v1.y % v2.y);
676 }
677
678 template<typename T, qualifier Q>
679 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator&(vec<2, T, Q> const& v, T scalar)
680 {
681 return vec<2, T, Q>(
682 v.x & scalar,
683 v.y & scalar);
684 }
685
686 template<typename T, qualifier Q>
687 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator&(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2)
688 {
689 return vec<2, T, Q>(
690 v1.x & v2.x,
691 v1.y & v2.x);
692 }
693
694 template<typename T, qualifier Q>
695 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator&(T scalar, vec<2, T, Q> const& v)
696 {
697 return vec<2, T, Q>(
698 scalar & v.x,
699 scalar & v.y);
700 }
701
702 template<typename T, qualifier Q>
703 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator&(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2)
704 {
705 return vec<2, T, Q>(
706 v1.x & v2.x,
707 v1.x & v2.y);
708 }
709
710 template<typename T, qualifier Q>
711 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator&(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2)
712 {
713 return vec<2, T, Q>(
714 v1.x & v2.x,
715 v1.y & v2.y);
716 }
717
718 template<typename T, qualifier Q>
719 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator|(vec<2, T, Q> const& v, T scalar)
720 {
721 return vec<2, T, Q>(
722 v.x | scalar,
723 v.y | scalar);
724 }
725
726 template<typename T, qualifier Q>
727 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator|(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2)
728 {
729 return vec<2, T, Q>(
730 v1.x | v2.x,
731 v1.y | v2.x);
732 }
733
734 template<typename T, qualifier Q>
735 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator|(T scalar, vec<2, T, Q> const& v)
736 {
737 return vec<2, T, Q>(
738 scalar | v.x,
739 scalar | v.y);
740 }
741
742 template<typename T, qualifier Q>
743 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator|(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2)
744 {
745 return vec<2, T, Q>(
746 v1.x | v2.x,
747 v1.x | v2.y);
748 }
749
750 template<typename T, qualifier Q>
751 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator|(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2)
752 {
753 return vec<2, T, Q>(
754 v1.x | v2.x,
755 v1.y | v2.y);
756 }
757
758 template<typename T, qualifier Q>
759 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator^(vec<2, T, Q> const& v, T scalar)
760 {
761 return vec<2, T, Q>(
762 v.x ^ scalar,
763 v.y ^ scalar);
764 }
765
766 template<typename T, qualifier Q>
767 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator^(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2)
768 {
769 return vec<2, T, Q>(
770 v1.x ^ v2.x,
771 v1.y ^ v2.x);
772 }
773
774 template<typename T, qualifier Q>
775 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator^(T scalar, vec<2, T, Q> const& v)
776 {
777 return vec<2, T, Q>(
778 scalar ^ v.x,
779 scalar ^ v.y);
780 }
781
782 template<typename T, qualifier Q>
783 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator^(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2)
784 {
785 return vec<2, T, Q>(
786 v1.x ^ v2.x,
787 v1.x ^ v2.y);
788 }
789
790 template<typename T, qualifier Q>
791 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator^(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2)
792 {
793 return vec<2, T, Q>(
794 v1.x ^ v2.x,
795 v1.y ^ v2.y);
796 }
797
798 template<typename T, qualifier Q>
799 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator<<(vec<2, T, Q> const& v, T scalar)
800 {
801 return vec<2, T, Q>(
802 v.x << scalar,
803 v.y << scalar);
804 }
805
806 template<typename T, qualifier Q>
807 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator<<(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2)
808 {
809 return vec<2, T, Q>(
810 v1.x << v2.x,
811 v1.y << v2.x);
812 }
813
814 template<typename T, qualifier Q>
815 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator<<(T scalar, vec<2, T, Q> const& v)
816 {
817 return vec<2, T, Q>(
818 scalar << v.x,
819 scalar << v.y);
820 }
821
822 template<typename T, qualifier Q>
823 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator<<(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2)
824 {
825 return vec<2, T, Q>(
826 v1.x << v2.x,
827 v1.x << v2.y);
828 }
829
830 template<typename T, qualifier Q>
831 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator<<(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2)
832 {
833 return vec<2, T, Q>(
834 v1.x << v2.x,
835 v1.y << v2.y);
836 }
837
838 template<typename T, qualifier Q>
839 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator>>(vec<2, T, Q> const& v, T scalar)
840 {
841 return vec<2, T, Q>(
842 v.x >> scalar,
843 v.y >> scalar);
844 }
845
846 template<typename T, qualifier Q>
847 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator>>(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2)
848 {
849 return vec<2, T, Q>(
850 v1.x >> v2.x,
851 v1.y >> v2.x);
852 }
853
854 template<typename T, qualifier Q>
855 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator>>(T scalar, vec<2, T, Q> const& v)
856 {
857 return vec<2, T, Q>(
858 scalar >> v.x,
859 scalar >> v.y);
860 }
861
862 template<typename T, qualifier Q>
863 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator>>(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2)
864 {
865 return vec<2, T, Q>(
866 v1.x >> v2.x,
867 v1.x >> v2.y);
868 }
869
870 template<typename T, qualifier Q>
871 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator>>(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2)
872 {
873 return vec<2, T, Q>(
874 v1.x >> v2.x,
875 v1.y >> v2.y);
876 }
877
878 template<typename T, qualifier Q>
879 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator~(vec<2, T, Q> const& v)
880 {
881 return vec<2, T, Q>(
882 ~v.x,
883 ~v.y);
884 }
885
886 // -- Boolean operators --
887
888 template<typename T, qualifier Q>
889 GLM_FUNC_QUALIFIER GLM_CONSTEXPR bool operator==(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2)
890 {
891 return
892 detail::compute_equal<T, std::numeric_limits<T>::is_iec559>::call(v1.x, v2.x) &&
893 detail::compute_equal<T, std::numeric_limits<T>::is_iec559>::call(v1.y, v2.y);
894 }
895
896 template<typename T, qualifier Q>
897 GLM_FUNC_QUALIFIER GLM_CONSTEXPR bool operator!=(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2)
898 {
899 return !(v1 == v2);
900 }
901
902 template<qualifier Q>
903 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, bool, Q> operator&&(vec<2, bool, Q> const& v1, vec<2, bool, Q> const& v2)
904 {
905 return vec<2, bool, Q>(v1.x && v2.x, v1.y && v2.y);
906 }
907
908 template<qualifier Q>
909 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, bool, Q> operator||(vec<2, bool, Q> const& v1, vec<2, bool, Q> const& v2)
910 {
911 return vec<2, bool, Q>(v1.x || v2.x, v1.y || v2.y);
912 }
913}//namespace glm
Core features
Definition common.hpp:21