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