1#![allow(dead_code)]
2
3use std::{
4 fmt::Display,
5 ops::{Add, AddAssign, Div, DivAssign, Index, IndexMut, Mul, MulAssign, Neg, Sub, SubAssign},
6};
7
8use super::{vec4d, Vec2f, Vec3f, Vec4d};
9
10#[derive(Clone, Copy, PartialEq, Debug)]
11pub struct Vec4f {
12 x: f32,
13 y: f32,
14 z: f32,
15 w: f32,
16}
17
18pub fn vec4f(x: f32, y: f32, z: f32, w: f32) -> Vec4f {
19 Vec4f::new(x, y, z, w)
20}
21
22impl Display for Vec4f {
23 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
24 write!(
25 f,
26 "Vec4f(x: {}, y: {}, z: {}, w: {})",
27 self.x, self.y, self.z, self.w
28 )
29 }
30}
31
32impl Default for Vec4f {
33 fn default() -> Self {
34 Self::new(0.0, 0.0, 0.0, 0.0)
35 }
36}
37
38impl Add<Vec4f> for Vec4f {
39 type Output = Vec4f;
40
41 fn add(self, rhs: Vec4f) -> Self::Output {
42 Vec4f::new(
43 self.x + rhs.x,
44 self.y + rhs.y,
45 self.z + rhs.z,
46 self.w + rhs.w,
47 )
48 }
49}
50
51impl Add<f32> for Vec4f {
52 type Output = Vec4f;
53
54 fn add(self, rhs: f32) -> Self::Output {
55 Vec4f::new(self.x + rhs, self.y + rhs, self.z + rhs, self.w + rhs)
56 }
57}
58
59impl Add<Vec4f> for f32 {
60 type Output = Vec4f;
61
62 fn add(self, rhs: Vec4f) -> Self::Output {
63 Vec4f::new(self + rhs.x, self + rhs.y, self + rhs.z, self + rhs.w)
64 }
65}
66
67impl AddAssign<Vec4f> for Vec4f {
68 fn add_assign(&mut self, rhs: Vec4f) {
69 self.x += rhs.x;
70 self.y += rhs.y;
71 self.z += rhs.z;
72 self.w += rhs.w;
73 }
74}
75
76impl AddAssign<f32> for Vec4f {
77 fn add_assign(&mut self, rhs: f32) {
78 self.x += rhs;
79 self.y += rhs;
80 self.z += rhs;
81 self.w += rhs;
82 }
83}
84
85impl Sub<Vec4f> for Vec4f {
86 type Output = Vec4f;
87
88 fn sub(self, rhs: Vec4f) -> Self::Output {
89 Vec4f::new(
90 self.x - rhs.x,
91 self.y - rhs.y,
92 self.z - rhs.z,
93 self.w - rhs.w,
94 )
95 }
96}
97
98impl Sub<f32> for Vec4f {
99 type Output = Vec4f;
100
101 fn sub(self, rhs: f32) -> Self::Output {
102 Vec4f::new(self.x - rhs, self.y - rhs, self.z - rhs, self.w - rhs)
103 }
104}
105
106impl Sub<Vec4f> for f32 {
107 type Output = Vec4f;
108
109 fn sub(self, rhs: Vec4f) -> Self::Output {
110 Vec4f::new(self - rhs.x, self - rhs.y, self - rhs.z, self - rhs.w)
111 }
112}
113
114impl SubAssign<Vec4f> for Vec4f {
115 fn sub_assign(&mut self, rhs: Vec4f) {
116 self.x -= rhs.x;
117 self.y -= rhs.y;
118 self.z -= rhs.z;
119 self.w -= rhs.w;
120 }
121}
122
123impl SubAssign<f32> for Vec4f {
124 fn sub_assign(&mut self, rhs: f32) {
125 self.x -= rhs;
126 self.y -= rhs;
127 self.z -= rhs;
128 self.w -= rhs;
129 }
130}
131
132impl Mul<Vec4f> for Vec4f {
133 type Output = Vec4f;
134
135 fn mul(self, rhs: Vec4f) -> Self::Output {
136 Vec4f::new(
137 self.x * rhs.x,
138 self.y * rhs.y,
139 self.z * rhs.z,
140 self.w * rhs.w,
141 )
142 }
143}
144
145impl Mul<f32> for Vec4f {
146 type Output = Vec4f;
147
148 fn mul(self, rhs: f32) -> Self::Output {
149 Vec4f::new(self.x * rhs, self.y * rhs, self.z * rhs, self.w * rhs)
150 }
151}
152
153impl Mul<Vec4f> for f32 {
154 type Output = Vec4f;
155
156 fn mul(self, rhs: Vec4f) -> Self::Output {
157 Vec4f::new(self * rhs.x, self * rhs.y, self * rhs.z, self * rhs.w)
158 }
159}
160
161impl MulAssign<Vec4f> for Vec4f {
162 fn mul_assign(&mut self, rhs: Vec4f) {
163 self.x *= rhs.x;
164 self.y *= rhs.y;
165 self.z *= rhs.z;
166 self.w *= rhs.w;
167 }
168}
169
170impl MulAssign<f32> for Vec4f {
171 fn mul_assign(&mut self, rhs: f32) {
172 self.x *= rhs;
173 self.y *= rhs;
174 self.z *= rhs;
175 self.w *= rhs;
176 }
177}
178
179impl Div<Vec4f> for Vec4f {
180 type Output = Vec4f;
181
182 fn div(self, rhs: Vec4f) -> Self::Output {
183 Vec4f::new(
184 self.x / rhs.x,
185 self.y / rhs.y,
186 self.z / rhs.z,
187 self.w / rhs.w,
188 )
189 }
190}
191
192impl Div<f32> for Vec4f {
193 type Output = Vec4f;
194
195 fn div(self, rhs: f32) -> Self::Output {
196 Vec4f::new(self.x / rhs, self.y / rhs, self.z / rhs, self.w / rhs)
197 }
198}
199
200impl Div<Vec4f> for f32 {
201 type Output = Vec4f;
202
203 fn div(self, rhs: Vec4f) -> Self::Output {
204 Vec4f::new(self / rhs.x, self / rhs.y, self / rhs.z, self / rhs.w)
205 }
206}
207
208impl DivAssign<Vec4f> for Vec4f {
209 fn div_assign(&mut self, rhs: Vec4f) {
210 self.x /= rhs.x;
211 self.y /= rhs.y;
212 self.z /= rhs.z;
213 self.w /= rhs.w;
214 }
215}
216
217impl DivAssign<f32> for Vec4f {
218 fn div_assign(&mut self, rhs: f32) {
219 self.x /= rhs;
220 self.y /= rhs;
221 self.z /= rhs;
222 self.w /= rhs;
223 }
224}
225
226impl Neg for Vec4f {
227 type Output = Vec4f;
228
229 fn neg(self) -> Self::Output {
230 Self::new(-self.x, -self.y, -self.z, -self.w)
231 }
232}
233
234impl Index<usize> for Vec4f {
235 type Output = f32;
236
237 fn index(&self, index: usize) -> &Self::Output {
238 match index {
239 0 => &self.x,
240 1 => &self.y,
241 2 => &self.z,
242 3 => &self.w,
243 _ => panic!("`rmath::algebra::Vec4f::index`: index out of bounds."),
244 }
245 }
246}
247
248impl IndexMut<usize> for Vec4f {
249 fn index_mut(&mut self, index: usize) -> &mut Self::Output {
250 match index {
251 0 => &mut self.x,
252 1 => &mut self.y,
253 2 => &mut self.z,
254 3 => &mut self.w,
255 _ => panic!("`rmath::algebra::Vec4f::index_mut`: index out of bounds."),
256 }
257 }
258}
259
260impl From<f32> for Vec4f {
261 fn from(v: f32) -> Self {
262 Self::new(v, v, v, v)
263 }
264}
265
266impl From<(f32, f32, f32, f32)> for Vec4f {
267 fn from(v: (f32, f32, f32, f32)) -> Self {
268 let (x, y, z, w) = v;
269 Self::new(x, y, z, w)
270 }
271}
272
273impl From<(Vec2f, f32, f32)> for Vec4f {
274 fn from(v: (Vec2f, f32, f32)) -> Self {
275 let (xy, z, w) = v;
276 let (x, y) = xy.to_tuple();
277 Self::new(x, y, z, w)
278 }
279}
280
281impl From<(Vec3f, f32)> for Vec4f {
282 fn from(v: (Vec3f, f32)) -> Self {
283 let (xyz, w) = v;
284 let (x, y, z) = xyz.to_tuple();
285 Self::new(x, y, z, w)
286 }
287}
288
289impl Vec4f {
290 pub fn new(x: f32, y: f32, z: f32, w: f32) -> Self {
291 Self { x, y, z, w }
292 }
293
294 pub fn one() -> Self {
295 Self::new(1.0, 1.0, 1.0, 1.0)
296 }
297
298 pub fn zero() -> Self {
299 Self::new(0.0, 0.0, 0.0, 0.0)
300 }
301}
302
303impl Vec4f {
304 pub fn floor(self) -> Self {
305 Self::new(
306 self.x.floor(),
307 self.y.floor(),
308 self.z.floor(),
309 self.w.floor(),
310 )
311 }
312
313 pub fn ceil(self) -> Self {
314 Self::new(self.x.ceil(), self.y.ceil(), self.z.ceil(), self.w.ceil())
315 }
316
317 pub fn round(self) -> Self {
318 Self::new(
319 self.x.round(),
320 self.y.round(),
321 self.z.round(),
322 self.w.round(),
323 )
324 }
325
326 pub fn trunc(self) -> Self {
327 Self::new(
328 self.x.trunc(),
329 self.y.trunc(),
330 self.z.trunc(),
331 self.w.trunc(),
332 )
333 }
334
335 pub fn fract(self) -> Self {
336 Self::new(
337 self.x.fract(),
338 self.y.fract(),
339 self.z.fract(),
340 self.w.fract(),
341 )
342 }
343
344 pub fn abs(self) -> Self {
345 Self::new(self.x.abs(), self.y.abs(), self.z.abs(), self.w.abs())
346 }
347
348 pub fn signum(self) -> Self {
349 Self::new(
350 self.x.signum(),
351 self.y.signum(),
352 self.z.signum(),
353 self.w.signum(),
354 )
355 }
356
357 pub fn powf(self, n: f32) -> Self {
358 Self::new(
359 self.x.powf(n),
360 self.y.powf(n),
361 self.z.powf(n),
362 self.w.powf(n),
363 )
364 }
365
366 pub fn sqrt(self) -> Self {
367 Self::new(self.x.sqrt(), self.y.sqrt(), self.z.sqrt(), self.w.sqrt())
368 }
369
370 pub fn exp(self) -> Self {
371 Self::new(self.x.exp(), self.y.exp(), self.z.exp(), self.w.exp())
372 }
373
374 pub fn exp2(self) -> Self {
375 Self::new(self.x.exp2(), self.y.exp2(), self.z.exp2(), self.w.exp2())
376 }
377
378 pub fn ln(self) -> Self {
379 Self::new(self.x.ln(), self.y.ln(), self.z.ln(), self.w.ln())
380 }
381
382 pub fn log(self, base: f32) -> Self {
383 Self::new(
384 self.x.log(base),
385 self.y.log(base),
386 self.z.log(base),
387 self.w.log(base),
388 )
389 }
390
391 pub fn log2(self) -> Self {
392 Self::new(self.x.log2(), self.y.log2(), self.z.log2(), self.w.log2())
393 }
394
395 pub fn log10(self) -> Self {
396 Self::new(
397 self.x.log10(),
398 self.y.log10(),
399 self.z.log10(),
400 self.w.log10(),
401 )
402 }
403
404 pub fn cbrt(self) -> Self {
405 Self::new(self.x.cbrt(), self.y.cbrt(), self.z.cbrt(), self.w.cbrt())
406 }
407
408 pub fn sin(self) -> Self {
409 Self::new(self.x.sin(), self.y.sin(), self.z.sin(), self.w.sin())
410 }
411
412 pub fn cos(self) -> Self {
413 Self::new(self.x.cos(), self.y.cos(), self.z.cos(), self.w.cos())
414 }
415
416 pub fn tan(self) -> Self {
417 Self::new(self.x.tan(), self.y.tan(), self.z.tan(), self.w.tan())
418 }
419
420 pub fn sin_cos(self) -> (Self, Self) {
421 (self.sin(), self.cos())
422 }
423
424 pub fn lerp(self, rhs: Self, s: f32) -> Self {
425 self + (rhs - self) * s
426 }
427
428 pub fn lerp_vec(self, rhs: Self, s: Self) -> Self {
429 self + (rhs - self) * s
430 }
431
432 pub fn is_nan(self) -> bool {
433 self.x.is_nan() || self.y.is_nan() || self.z.is_nan() || self.w.is_nan()
434 }
435
436 pub fn is_infinite(self) -> bool {
437 self.x.is_infinite() || self.y.is_infinite() || self.z.is_infinite() || self.w.is_infinite()
438 }
439
440 pub fn is_finite(self) -> bool {
441 self.x.is_finite() && self.y.is_finite() && self.z.is_finite() && self.w.is_finite()
442 }
443
444 pub fn recip(self) -> Self {
445 Self::new(
446 self.x.recip(),
447 self.y.recip(),
448 self.z.recip(),
449 self.w.recip(),
450 )
451 }
452
453 pub fn max(self, rhs: Self) -> Self {
454 Self::new(
455 self.x.max(rhs.x),
456 self.y.max(rhs.y),
457 self.z.max(rhs.z),
458 self.w.max(rhs.w),
459 )
460 }
461
462 pub fn min(self, rhs: Self) -> Self {
463 Self::new(
464 self.x.min(rhs.x),
465 self.y.min(rhs.y),
466 self.z.min(rhs.z),
467 self.w.min(rhs.w),
468 )
469 }
470
471 pub fn clamp(self, min: Self, max: Self) -> Self {
472 ruby_assert!(min.x <= max.x);
473 ruby_assert!(min.y <= max.y);
474 ruby_assert!(min.z <= max.z);
475 ruby_assert!(min.w <= max.w);
476
477 self.min(max).max(min)
478 }
479
480 pub fn saturate(self) -> Self {
481 self.clamp(Self::zero(), Self::one())
482 }
483
484 pub fn min_element(self) -> f32 {
485 self.x.min(self.y).min(self.z).min(self.w)
486 }
487
488 pub fn max_element(self) -> f32 {
489 self.x.max(self.y).max(self.z).max(self.w)
490 }
491}
492
493impl Vec4f {
494 pub fn dot(self, rhs: Self) -> f32 {
495 self.x * rhs.x + self.y * rhs.y + self.z * rhs.z + self.w * rhs.w
496 }
497
498 pub fn length(self) -> f32 {
499 self.dot(self).sqrt()
500 }
501
502 pub fn length_squared(self) -> f32 {
503 self.dot(self)
504 }
505
506 pub fn length_recip(self) -> f32 {
507 self.length().recip()
508 }
509
510 pub fn distance(self, rhs: Self) -> f32 {
511 (rhs - self).length()
512 }
513
514 pub fn distance_squared(self, rhs: Self) -> f32 {
515 (rhs - self).length_squared()
516 }
517
518 pub fn normalize(self) -> Self {
519 let normalized = self * self.length_recip();
520 ruby_assert!(normalized.is_finite());
521 normalized
522 }
523
524 pub fn try_normalize(self) -> Option<Self> {
525 let recip = self.length_recip();
526 if recip.is_finite() && recip > 0.0 {
527 Some(self * recip)
528 } else {
529 None
530 }
531 }
532
533 pub fn normalize_or_zero(self) -> Self {
534 let recip = self.length_recip();
535 if recip.is_finite() && recip > 0.0 {
536 self * recip
537 } else {
538 Self::zero()
539 }
540 }
541
542 pub fn is_normalized(self) -> bool {
543 (self.length_squared() - 1.0f32).abs() < f32::EPSILON
544 }
545}
546
547impl Vec4f {
548 pub fn to_array(self) -> [f32; 4] {
549 [self.x, self.y, self.z, self.w]
550 }
551
552 pub fn to_tuple(self) -> (f32, f32, f32, f32) {
553 (self.x, self.y, self.z, self.w)
554 }
555
556 pub fn to_vec4d(self) -> Vec4d {
557 vec4d(self.x as f64, self.y as f64, self.z as f64, self.w as f64)
558 }
559}
560
561impl Vec4f {
562 pub fn x(self) -> f32 {
563 self.x
564 }
565
566 pub fn y(self) -> f32 {
567 self.y
568 }
569
570 pub fn z(self) -> f32 {
571 self.z
572 }
573
574 pub fn w(self) -> f32 {
575 self.w
576 }
577
578 pub fn xx(self) -> Vec2f {
579 Vec2f::new(self.x, self.x)
580 }
581
582 pub fn xy(self) -> Vec2f {
583 Vec2f::new(self.x, self.y)
584 }
585
586 pub fn xz(self) -> Vec2f {
587 Vec2f::new(self.x, self.z)
588 }
589
590 pub fn xw(self) -> Vec2f {
591 Vec2f::new(self.x, self.w)
592 }
593
594 pub fn yx(self) -> Vec2f {
595 Vec2f::new(self.y, self.x)
596 }
597
598 pub fn yy(self) -> Vec2f {
599 Vec2f::new(self.y, self.y)
600 }
601
602 pub fn yz(self) -> Vec2f {
603 Vec2f::new(self.y, self.z)
604 }
605
606 pub fn yw(self) -> Vec2f {
607 Vec2f::new(self.y, self.w)
608 }
609
610 pub fn zx(self) -> Vec2f {
611 Vec2f::new(self.z, self.x)
612 }
613
614 pub fn zy(self) -> Vec2f {
615 Vec2f::new(self.z, self.y)
616 }
617
618 pub fn zz(self) -> Vec2f {
619 Vec2f::new(self.z, self.z)
620 }
621
622 pub fn zw(self) -> Vec2f {
623 Vec2f::new(self.z, self.w)
624 }
625
626 pub fn wx(self) -> Vec2f {
627 Vec2f::new(self.w, self.x)
628 }
629
630 pub fn wy(self) -> Vec2f {
631 Vec2f::new(self.w, self.y)
632 }
633
634 pub fn wz(self) -> Vec2f {
635 Vec2f::new(self.w, self.z)
636 }
637
638 pub fn ww(self) -> Vec2f {
639 Vec2f::new(self.w, self.w)
640 }
641
642 pub fn xxx(self) -> Vec3f {
643 Vec3f::new(self.x, self.x, self.x)
644 }
645
646 pub fn xxy(self) -> Vec3f {
647 Vec3f::new(self.x, self.x, self.y)
648 }
649
650 pub fn xxz(self) -> Vec3f {
651 Vec3f::new(self.x, self.x, self.z)
652 }
653
654 pub fn xxw(self) -> Vec3f {
655 Vec3f::new(self.x, self.x, self.w)
656 }
657
658 pub fn xyx(self) -> Vec3f {
659 Vec3f::new(self.x, self.y, self.x)
660 }
661
662 pub fn xyy(self) -> Vec3f {
663 Vec3f::new(self.x, self.y, self.y)
664 }
665
666 pub fn xyz(self) -> Vec3f {
667 Vec3f::new(self.x, self.y, self.z)
668 }
669
670 pub fn xyw(self) -> Vec3f {
671 Vec3f::new(self.x, self.y, self.w)
672 }
673
674 pub fn xzx(self) -> Vec3f {
675 Vec3f::new(self.x, self.z, self.x)
676 }
677
678 pub fn xzy(self) -> Vec3f {
679 Vec3f::new(self.x, self.z, self.y)
680 }
681
682 pub fn xzz(self) -> Vec3f {
683 Vec3f::new(self.x, self.z, self.z)
684 }
685
686 pub fn xzw(self) -> Vec3f {
687 Vec3f::new(self.x, self.z, self.w)
688 }
689
690 pub fn xwx(self) -> Vec3f {
691 Vec3f::new(self.x, self.w, self.x)
692 }
693
694 pub fn xwy(self) -> Vec3f {
695 Vec3f::new(self.x, self.w, self.y)
696 }
697
698 pub fn xwz(self) -> Vec3f {
699 Vec3f::new(self.x, self.w, self.z)
700 }
701
702 pub fn xww(self) -> Vec3f {
703 Vec3f::new(self.x, self.w, self.w)
704 }
705
706 pub fn yxx(self) -> Vec3f {
707 Vec3f::new(self.y, self.x, self.x)
708 }
709
710 pub fn yxy(self) -> Vec3f {
711 Vec3f::new(self.y, self.x, self.y)
712 }
713
714 pub fn yxz(self) -> Vec3f {
715 Vec3f::new(self.y, self.x, self.z)
716 }
717
718 pub fn yxw(self) -> Vec3f {
719 Vec3f::new(self.y, self.x, self.w)
720 }
721
722 pub fn yyx(self) -> Vec3f {
723 Vec3f::new(self.y, self.y, self.x)
724 }
725
726 pub fn yyy(self) -> Vec3f {
727 Vec3f::new(self.y, self.y, self.y)
728 }
729
730 pub fn yyz(self) -> Vec3f {
731 Vec3f::new(self.y, self.y, self.z)
732 }
733
734 pub fn yyw(self) -> Vec3f {
735 Vec3f::new(self.y, self.y, self.w)
736 }
737
738 pub fn yzx(self) -> Vec3f {
739 Vec3f::new(self.y, self.z, self.x)
740 }
741
742 pub fn yzy(self) -> Vec3f {
743 Vec3f::new(self.y, self.z, self.y)
744 }
745
746 pub fn yzz(self) -> Vec3f {
747 Vec3f::new(self.y, self.z, self.z)
748 }
749
750 pub fn yzw(self) -> Vec3f {
751 Vec3f::new(self.y, self.z, self.w)
752 }
753
754 pub fn ywx(self) -> Vec3f {
755 Vec3f::new(self.y, self.w, self.x)
756 }
757
758 pub fn ywy(self) -> Vec3f {
759 Vec3f::new(self.y, self.w, self.y)
760 }
761
762 pub fn ywz(self) -> Vec3f {
763 Vec3f::new(self.y, self.w, self.z)
764 }
765
766 pub fn yww(self) -> Vec3f {
767 Vec3f::new(self.y, self.w, self.w)
768 }
769
770 pub fn zxx(self) -> Vec3f {
771 Vec3f::new(self.z, self.x, self.x)
772 }
773
774 pub fn zxy(self) -> Vec3f {
775 Vec3f::new(self.z, self.x, self.y)
776 }
777
778 pub fn zxz(self) -> Vec3f {
779 Vec3f::new(self.z, self.x, self.z)
780 }
781
782 pub fn zxw(self) -> Vec3f {
783 Vec3f::new(self.z, self.x, self.w)
784 }
785
786 pub fn zyx(self) -> Vec3f {
787 Vec3f::new(self.z, self.y, self.x)
788 }
789
790 pub fn zyy(self) -> Vec3f {
791 Vec3f::new(self.z, self.y, self.y)
792 }
793
794 pub fn zyz(self) -> Vec3f {
795 Vec3f::new(self.z, self.y, self.z)
796 }
797
798 pub fn zyw(self) -> Vec3f {
799 Vec3f::new(self.z, self.y, self.w)
800 }
801
802 pub fn zzx(self) -> Vec3f {
803 Vec3f::new(self.z, self.z, self.x)
804 }
805
806 pub fn zzy(self) -> Vec3f {
807 Vec3f::new(self.z, self.z, self.y)
808 }
809
810 pub fn zzz(self) -> Vec3f {
811 Vec3f::new(self.z, self.z, self.z)
812 }
813
814 pub fn zzw(self) -> Vec3f {
815 Vec3f::new(self.z, self.z, self.w)
816 }
817
818 pub fn zwx(self) -> Vec3f {
819 Vec3f::new(self.z, self.w, self.x)
820 }
821
822 pub fn zwy(self) -> Vec3f {
823 Vec3f::new(self.z, self.w, self.y)
824 }
825
826 pub fn zwz(self) -> Vec3f {
827 Vec3f::new(self.z, self.w, self.z)
828 }
829
830 pub fn zww(self) -> Vec3f {
831 Vec3f::new(self.z, self.w, self.w)
832 }
833
834 pub fn wxx(self) -> Vec3f {
835 Vec3f::new(self.w, self.x, self.x)
836 }
837
838 pub fn wxy(self) -> Vec3f {
839 Vec3f::new(self.w, self.x, self.y)
840 }
841
842 pub fn wxz(self) -> Vec3f {
843 Vec3f::new(self.w, self.x, self.z)
844 }
845
846 pub fn wxw(self) -> Vec3f {
847 Vec3f::new(self.w, self.x, self.w)
848 }
849
850 pub fn wyx(self) -> Vec3f {
851 Vec3f::new(self.w, self.y, self.x)
852 }
853
854 pub fn wyy(self) -> Vec3f {
855 Vec3f::new(self.w, self.y, self.y)
856 }
857
858 pub fn wyz(self) -> Vec3f {
859 Vec3f::new(self.w, self.y, self.z)
860 }
861
862 pub fn wyw(self) -> Vec3f {
863 Vec3f::new(self.w, self.y, self.w)
864 }
865
866 pub fn wzx(self) -> Vec3f {
867 Vec3f::new(self.w, self.z, self.x)
868 }
869
870 pub fn wzy(self) -> Vec3f {
871 Vec3f::new(self.w, self.z, self.y)
872 }
873
874 pub fn wzz(self) -> Vec3f {
875 Vec3f::new(self.w, self.z, self.z)
876 }
877
878 pub fn wzw(self) -> Vec3f {
879 Vec3f::new(self.w, self.z, self.w)
880 }
881
882 pub fn wwx(self) -> Vec3f {
883 Vec3f::new(self.w, self.w, self.x)
884 }
885
886 pub fn wwy(self) -> Vec3f {
887 Vec3f::new(self.w, self.w, self.y)
888 }
889
890 pub fn wwz(self) -> Vec3f {
891 Vec3f::new(self.w, self.w, self.z)
892 }
893
894 pub fn www(self) -> Vec3f {
895 Vec3f::new(self.w, self.w, self.w)
896 }
897
898 pub fn xxxx(self) -> Self {
899 Self::new(self.x, self.x, self.x, self.x)
900 }
901
902 pub fn xxxy(self) -> Self {
903 Self::new(self.x, self.x, self.x, self.y)
904 }
905
906 pub fn xxxz(self) -> Self {
907 Self::new(self.x, self.x, self.x, self.z)
908 }
909
910 pub fn xxxw(self) -> Self {
911 Self::new(self.x, self.x, self.x, self.w)
912 }
913
914 pub fn xxyx(self) -> Self {
915 Self::new(self.x, self.x, self.y, self.x)
916 }
917
918 pub fn xxyy(self) -> Self {
919 Self::new(self.x, self.x, self.y, self.y)
920 }
921
922 pub fn xxyz(self) -> Self {
923 Self::new(self.x, self.x, self.y, self.z)
924 }
925
926 pub fn xxyw(self) -> Self {
927 Self::new(self.x, self.x, self.y, self.w)
928 }
929
930 pub fn xxzx(self) -> Self {
931 Self::new(self.x, self.x, self.z, self.x)
932 }
933
934 pub fn xxzy(self) -> Self {
935 Self::new(self.x, self.x, self.z, self.y)
936 }
937
938 pub fn xxzz(self) -> Self {
939 Self::new(self.x, self.x, self.z, self.z)
940 }
941
942 pub fn xxzw(self) -> Self {
943 Self::new(self.x, self.x, self.z, self.w)
944 }
945
946 pub fn xxwx(self) -> Self {
947 Self::new(self.x, self.x, self.w, self.x)
948 }
949
950 pub fn xxwy(self) -> Self {
951 Self::new(self.x, self.x, self.w, self.y)
952 }
953
954 pub fn xxwz(self) -> Self {
955 Self::new(self.x, self.x, self.w, self.z)
956 }
957
958 pub fn xxww(self) -> Self {
959 Self::new(self.x, self.x, self.w, self.w)
960 }
961
962 pub fn xyxx(self) -> Self {
963 Self::new(self.x, self.y, self.x, self.x)
964 }
965
966 pub fn xyxy(self) -> Self {
967 Self::new(self.x, self.y, self.x, self.y)
968 }
969
970 pub fn xyxz(self) -> Self {
971 Self::new(self.x, self.y, self.x, self.z)
972 }
973
974 pub fn xyxw(self) -> Self {
975 Self::new(self.x, self.y, self.x, self.w)
976 }
977
978 pub fn xyyx(self) -> Self {
979 Self::new(self.x, self.y, self.y, self.x)
980 }
981
982 pub fn xyyy(self) -> Self {
983 Self::new(self.x, self.y, self.y, self.y)
984 }
985
986 pub fn xyyz(self) -> Self {
987 Self::new(self.x, self.y, self.y, self.z)
988 }
989
990 pub fn xyyw(self) -> Self {
991 Self::new(self.x, self.y, self.y, self.w)
992 }
993
994 pub fn xyzx(self) -> Self {
995 Self::new(self.x, self.y, self.z, self.x)
996 }
997
998 pub fn xyzy(self) -> Self {
999 Self::new(self.x, self.y, self.z, self.y)
1000 }
1001
1002 pub fn xyzz(self) -> Self {
1003 Self::new(self.x, self.y, self.z, self.z)
1004 }
1005
1006 pub fn xyzw(self) -> Self {
1007 Self::new(self.x, self.y, self.z, self.w)
1008 }
1009
1010 pub fn xywx(self) -> Self {
1011 Self::new(self.x, self.y, self.w, self.x)
1012 }
1013
1014 pub fn xywy(self) -> Self {
1015 Self::new(self.x, self.y, self.w, self.y)
1016 }
1017
1018 pub fn xywz(self) -> Self {
1019 Self::new(self.x, self.y, self.w, self.z)
1020 }
1021
1022 pub fn xyww(self) -> Self {
1023 Self::new(self.x, self.y, self.w, self.w)
1024 }
1025
1026 pub fn xzxx(self) -> Self {
1027 Self::new(self.x, self.z, self.x, self.x)
1028 }
1029
1030 pub fn xzxy(self) -> Self {
1031 Self::new(self.x, self.z, self.x, self.y)
1032 }
1033
1034 pub fn xzxz(self) -> Self {
1035 Self::new(self.x, self.z, self.x, self.z)
1036 }
1037
1038 pub fn xzxw(self) -> Self {
1039 Self::new(self.x, self.z, self.x, self.w)
1040 }
1041
1042 pub fn xzyx(self) -> Self {
1043 Self::new(self.x, self.z, self.y, self.x)
1044 }
1045
1046 pub fn xzyy(self) -> Self {
1047 Self::new(self.x, self.z, self.y, self.y)
1048 }
1049
1050 pub fn xzyz(self) -> Self {
1051 Self::new(self.x, self.z, self.y, self.z)
1052 }
1053
1054 pub fn xzyw(self) -> Self {
1055 Self::new(self.x, self.z, self.y, self.w)
1056 }
1057
1058 pub fn xzzx(self) -> Self {
1059 Self::new(self.x, self.z, self.z, self.x)
1060 }
1061
1062 pub fn xzzy(self) -> Self {
1063 Self::new(self.x, self.z, self.z, self.y)
1064 }
1065
1066 pub fn xzzz(self) -> Self {
1067 Self::new(self.x, self.z, self.z, self.z)
1068 }
1069
1070 pub fn xzzw(self) -> Self {
1071 Self::new(self.x, self.z, self.z, self.w)
1072 }
1073
1074 pub fn xzwx(self) -> Self {
1075 Self::new(self.x, self.z, self.w, self.x)
1076 }
1077
1078 pub fn xzwy(self) -> Self {
1079 Self::new(self.x, self.z, self.w, self.y)
1080 }
1081
1082 pub fn xzwz(self) -> Self {
1083 Self::new(self.x, self.z, self.w, self.z)
1084 }
1085
1086 pub fn xzww(self) -> Self {
1087 Self::new(self.x, self.z, self.w, self.w)
1088 }
1089
1090 pub fn xwxx(self) -> Self {
1091 Self::new(self.x, self.w, self.x, self.x)
1092 }
1093
1094 pub fn xwxy(self) -> Self {
1095 Self::new(self.x, self.w, self.x, self.y)
1096 }
1097
1098 pub fn xwxz(self) -> Self {
1099 Self::new(self.x, self.w, self.x, self.z)
1100 }
1101
1102 pub fn xwxw(self) -> Self {
1103 Self::new(self.x, self.w, self.x, self.w)
1104 }
1105
1106 pub fn xwyx(self) -> Self {
1107 Self::new(self.x, self.w, self.y, self.x)
1108 }
1109
1110 pub fn xwyy(self) -> Self {
1111 Self::new(self.x, self.w, self.y, self.y)
1112 }
1113
1114 pub fn xwyz(self) -> Self {
1115 Self::new(self.x, self.w, self.y, self.z)
1116 }
1117
1118 pub fn xwyw(self) -> Self {
1119 Self::new(self.x, self.w, self.y, self.w)
1120 }
1121
1122 pub fn xwzx(self) -> Self {
1123 Self::new(self.x, self.w, self.z, self.x)
1124 }
1125
1126 pub fn xwzy(self) -> Self {
1127 Self::new(self.x, self.w, self.z, self.y)
1128 }
1129
1130 pub fn xwzz(self) -> Self {
1131 Self::new(self.x, self.w, self.z, self.z)
1132 }
1133
1134 pub fn xwzw(self) -> Self {
1135 Self::new(self.x, self.w, self.z, self.w)
1136 }
1137
1138 pub fn xwwx(self) -> Self {
1139 Self::new(self.x, self.w, self.w, self.x)
1140 }
1141
1142 pub fn xwwy(self) -> Self {
1143 Self::new(self.x, self.w, self.w, self.y)
1144 }
1145
1146 pub fn xwwz(self) -> Self {
1147 Self::new(self.x, self.w, self.w, self.z)
1148 }
1149
1150 pub fn xwww(self) -> Self {
1151 Self::new(self.x, self.w, self.w, self.w)
1152 }
1153
1154 pub fn yxxx(self) -> Self {
1155 Self::new(self.y, self.x, self.x, self.x)
1156 }
1157
1158 pub fn yxxy(self) -> Self {
1159 Self::new(self.y, self.x, self.x, self.y)
1160 }
1161
1162 pub fn yxxz(self) -> Self {
1163 Self::new(self.y, self.x, self.x, self.z)
1164 }
1165
1166 pub fn yxxw(self) -> Self {
1167 Self::new(self.y, self.x, self.x, self.w)
1168 }
1169
1170 pub fn yxyx(self) -> Self {
1171 Self::new(self.y, self.x, self.y, self.x)
1172 }
1173
1174 pub fn yxyy(self) -> Self {
1175 Self::new(self.y, self.x, self.y, self.y)
1176 }
1177
1178 pub fn yxyz(self) -> Self {
1179 Self::new(self.y, self.x, self.y, self.z)
1180 }
1181
1182 pub fn yxyw(self) -> Self {
1183 Self::new(self.y, self.x, self.y, self.w)
1184 }
1185
1186 pub fn yxzx(self) -> Self {
1187 Self::new(self.y, self.x, self.z, self.x)
1188 }
1189
1190 pub fn yxzy(self) -> Self {
1191 Self::new(self.y, self.x, self.z, self.y)
1192 }
1193
1194 pub fn yxzz(self) -> Self {
1195 Self::new(self.y, self.x, self.z, self.z)
1196 }
1197
1198 pub fn yxzw(self) -> Self {
1199 Self::new(self.y, self.x, self.z, self.w)
1200 }
1201
1202 pub fn yxwx(self) -> Self {
1203 Self::new(self.y, self.x, self.w, self.x)
1204 }
1205
1206 pub fn yxwy(self) -> Self {
1207 Self::new(self.y, self.x, self.w, self.y)
1208 }
1209
1210 pub fn yxwz(self) -> Self {
1211 Self::new(self.y, self.x, self.w, self.z)
1212 }
1213
1214 pub fn yxww(self) -> Self {
1215 Self::new(self.y, self.x, self.w, self.w)
1216 }
1217
1218 pub fn yyxx(self) -> Self {
1219 Self::new(self.y, self.y, self.x, self.x)
1220 }
1221
1222 pub fn yyxy(self) -> Self {
1223 Self::new(self.y, self.y, self.x, self.y)
1224 }
1225
1226 pub fn yyxz(self) -> Self {
1227 Self::new(self.y, self.y, self.x, self.z)
1228 }
1229
1230 pub fn yyxw(self) -> Self {
1231 Self::new(self.y, self.y, self.x, self.w)
1232 }
1233
1234 pub fn yyyx(self) -> Self {
1235 Self::new(self.y, self.y, self.y, self.x)
1236 }
1237
1238 pub fn yyyy(self) -> Self {
1239 Self::new(self.y, self.y, self.y, self.y)
1240 }
1241
1242 pub fn yyyz(self) -> Self {
1243 Self::new(self.y, self.y, self.y, self.z)
1244 }
1245
1246 pub fn yyyw(self) -> Self {
1247 Self::new(self.y, self.y, self.y, self.w)
1248 }
1249
1250 pub fn yyzx(self) -> Self {
1251 Self::new(self.y, self.y, self.z, self.x)
1252 }
1253
1254 pub fn yyzy(self) -> Self {
1255 Self::new(self.y, self.y, self.z, self.y)
1256 }
1257
1258 pub fn yyzz(self) -> Self {
1259 Self::new(self.y, self.y, self.z, self.z)
1260 }
1261
1262 pub fn yyzw(self) -> Self {
1263 Self::new(self.y, self.y, self.z, self.w)
1264 }
1265
1266 pub fn yywx(self) -> Self {
1267 Self::new(self.y, self.y, self.w, self.x)
1268 }
1269
1270 pub fn yywy(self) -> Self {
1271 Self::new(self.y, self.y, self.w, self.y)
1272 }
1273
1274 pub fn yywz(self) -> Self {
1275 Self::new(self.y, self.y, self.w, self.z)
1276 }
1277
1278 pub fn yyww(self) -> Self {
1279 Self::new(self.y, self.y, self.w, self.w)
1280 }
1281
1282 pub fn yzxx(self) -> Self {
1283 Self::new(self.y, self.z, self.x, self.x)
1284 }
1285
1286 pub fn yzxy(self) -> Self {
1287 Self::new(self.y, self.z, self.x, self.y)
1288 }
1289
1290 pub fn yzxz(self) -> Self {
1291 Self::new(self.y, self.z, self.x, self.z)
1292 }
1293
1294 pub fn yzxw(self) -> Self {
1295 Self::new(self.y, self.z, self.x, self.w)
1296 }
1297
1298 pub fn yzyx(self) -> Self {
1299 Self::new(self.y, self.z, self.y, self.x)
1300 }
1301
1302 pub fn yzyy(self) -> Self {
1303 Self::new(self.y, self.z, self.y, self.y)
1304 }
1305
1306 pub fn yzyz(self) -> Self {
1307 Self::new(self.y, self.z, self.y, self.z)
1308 }
1309
1310 pub fn yzyw(self) -> Self {
1311 Self::new(self.y, self.z, self.y, self.w)
1312 }
1313
1314 pub fn yzzx(self) -> Self {
1315 Self::new(self.y, self.z, self.z, self.x)
1316 }
1317
1318 pub fn yzzy(self) -> Self {
1319 Self::new(self.y, self.z, self.z, self.y)
1320 }
1321
1322 pub fn yzzz(self) -> Self {
1323 Self::new(self.y, self.z, self.z, self.z)
1324 }
1325
1326 pub fn yzzw(self) -> Self {
1327 Self::new(self.y, self.z, self.z, self.w)
1328 }
1329
1330 pub fn yzwx(self) -> Self {
1331 Self::new(self.y, self.z, self.w, self.x)
1332 }
1333
1334 pub fn yzwy(self) -> Self {
1335 Self::new(self.y, self.z, self.w, self.y)
1336 }
1337
1338 pub fn yzwz(self) -> Self {
1339 Self::new(self.y, self.z, self.w, self.z)
1340 }
1341
1342 pub fn yzww(self) -> Self {
1343 Self::new(self.y, self.z, self.w, self.w)
1344 }
1345
1346 pub fn ywxx(self) -> Self {
1347 Self::new(self.y, self.w, self.x, self.x)
1348 }
1349
1350 pub fn ywxy(self) -> Self {
1351 Self::new(self.y, self.w, self.x, self.y)
1352 }
1353
1354 pub fn ywxz(self) -> Self {
1355 Self::new(self.y, self.w, self.x, self.z)
1356 }
1357
1358 pub fn ywxw(self) -> Self {
1359 Self::new(self.y, self.w, self.x, self.w)
1360 }
1361
1362 pub fn ywyx(self) -> Self {
1363 Self::new(self.y, self.w, self.y, self.x)
1364 }
1365
1366 pub fn ywyy(self) -> Self {
1367 Self::new(self.y, self.w, self.y, self.y)
1368 }
1369
1370 pub fn ywyz(self) -> Self {
1371 Self::new(self.y, self.w, self.y, self.z)
1372 }
1373
1374 pub fn ywyw(self) -> Self {
1375 Self::new(self.y, self.w, self.y, self.w)
1376 }
1377
1378 pub fn ywzx(self) -> Self {
1379 Self::new(self.y, self.w, self.z, self.x)
1380 }
1381
1382 pub fn ywzy(self) -> Self {
1383 Self::new(self.y, self.w, self.z, self.y)
1384 }
1385
1386 pub fn ywzz(self) -> Self {
1387 Self::new(self.y, self.w, self.z, self.z)
1388 }
1389
1390 pub fn ywzw(self) -> Self {
1391 Self::new(self.y, self.w, self.z, self.w)
1392 }
1393
1394 pub fn ywwx(self) -> Self {
1395 Self::new(self.y, self.w, self.w, self.x)
1396 }
1397
1398 pub fn ywwy(self) -> Self {
1399 Self::new(self.y, self.w, self.w, self.y)
1400 }
1401
1402 pub fn ywwz(self) -> Self {
1403 Self::new(self.y, self.w, self.w, self.z)
1404 }
1405
1406 pub fn ywww(self) -> Self {
1407 Self::new(self.y, self.w, self.w, self.w)
1408 }
1409
1410 pub fn zxxx(self) -> Self {
1411 Self::new(self.z, self.x, self.x, self.x)
1412 }
1413
1414 pub fn zxxy(self) -> Self {
1415 Self::new(self.z, self.x, self.x, self.y)
1416 }
1417
1418 pub fn zxxz(self) -> Self {
1419 Self::new(self.z, self.x, self.x, self.z)
1420 }
1421
1422 pub fn zxxw(self) -> Self {
1423 Self::new(self.z, self.x, self.x, self.w)
1424 }
1425
1426 pub fn zxyx(self) -> Self {
1427 Self::new(self.z, self.x, self.y, self.x)
1428 }
1429
1430 pub fn zxyy(self) -> Self {
1431 Self::new(self.z, self.x, self.y, self.y)
1432 }
1433
1434 pub fn zxyz(self) -> Self {
1435 Self::new(self.z, self.x, self.y, self.z)
1436 }
1437
1438 pub fn zxyw(self) -> Self {
1439 Self::new(self.z, self.x, self.y, self.w)
1440 }
1441
1442 pub fn zxzx(self) -> Self {
1443 Self::new(self.z, self.x, self.z, self.x)
1444 }
1445
1446 pub fn zxzy(self) -> Self {
1447 Self::new(self.z, self.x, self.z, self.y)
1448 }
1449
1450 pub fn zxzz(self) -> Self {
1451 Self::new(self.z, self.x, self.z, self.z)
1452 }
1453
1454 pub fn zxzw(self) -> Self {
1455 Self::new(self.z, self.x, self.z, self.w)
1456 }
1457
1458 pub fn zxwx(self) -> Self {
1459 Self::new(self.z, self.x, self.w, self.x)
1460 }
1461
1462 pub fn zxwy(self) -> Self {
1463 Self::new(self.z, self.x, self.w, self.y)
1464 }
1465
1466 pub fn zxwz(self) -> Self {
1467 Self::new(self.z, self.x, self.w, self.z)
1468 }
1469
1470 pub fn zxww(self) -> Self {
1471 Self::new(self.z, self.x, self.w, self.w)
1472 }
1473
1474 pub fn zyxx(self) -> Self {
1475 Self::new(self.z, self.y, self.x, self.x)
1476 }
1477
1478 pub fn zyxy(self) -> Self {
1479 Self::new(self.z, self.y, self.x, self.y)
1480 }
1481
1482 pub fn zyxz(self) -> Self {
1483 Self::new(self.z, self.y, self.x, self.z)
1484 }
1485
1486 pub fn zyxw(self) -> Self {
1487 Self::new(self.z, self.y, self.x, self.w)
1488 }
1489
1490 pub fn zyyx(self) -> Self {
1491 Self::new(self.z, self.y, self.y, self.x)
1492 }
1493
1494 pub fn zyyy(self) -> Self {
1495 Self::new(self.z, self.y, self.y, self.y)
1496 }
1497
1498 pub fn zyyz(self) -> Self {
1499 Self::new(self.z, self.y, self.y, self.z)
1500 }
1501
1502 pub fn zyyw(self) -> Self {
1503 Self::new(self.z, self.y, self.y, self.w)
1504 }
1505
1506 pub fn zyzx(self) -> Self {
1507 Self::new(self.z, self.y, self.z, self.x)
1508 }
1509
1510 pub fn zyzy(self) -> Self {
1511 Self::new(self.z, self.y, self.z, self.y)
1512 }
1513
1514 pub fn zyzz(self) -> Self {
1515 Self::new(self.z, self.y, self.z, self.z)
1516 }
1517
1518 pub fn zyzw(self) -> Self {
1519 Self::new(self.z, self.y, self.z, self.w)
1520 }
1521
1522 pub fn zywx(self) -> Self {
1523 Self::new(self.z, self.y, self.w, self.x)
1524 }
1525
1526 pub fn zywy(self) -> Self {
1527 Self::new(self.z, self.y, self.w, self.y)
1528 }
1529
1530 pub fn zywz(self) -> Self {
1531 Self::new(self.z, self.y, self.w, self.z)
1532 }
1533
1534 pub fn zyww(self) -> Self {
1535 Self::new(self.z, self.y, self.w, self.w)
1536 }
1537
1538 pub fn zzxx(self) -> Self {
1539 Self::new(self.z, self.z, self.x, self.x)
1540 }
1541
1542 pub fn zzxy(self) -> Self {
1543 Self::new(self.z, self.z, self.x, self.y)
1544 }
1545
1546 pub fn zzxz(self) -> Self {
1547 Self::new(self.z, self.z, self.x, self.z)
1548 }
1549
1550 pub fn zzxw(self) -> Self {
1551 Self::new(self.z, self.z, self.x, self.w)
1552 }
1553
1554 pub fn zzyx(self) -> Self {
1555 Self::new(self.z, self.z, self.y, self.x)
1556 }
1557
1558 pub fn zzyy(self) -> Self {
1559 Self::new(self.z, self.z, self.y, self.y)
1560 }
1561
1562 pub fn zzyz(self) -> Self {
1563 Self::new(self.z, self.z, self.y, self.z)
1564 }
1565
1566 pub fn zzyw(self) -> Self {
1567 Self::new(self.z, self.z, self.y, self.w)
1568 }
1569
1570 pub fn zzzx(self) -> Self {
1571 Self::new(self.z, self.z, self.z, self.x)
1572 }
1573
1574 pub fn zzzy(self) -> Self {
1575 Self::new(self.z, self.z, self.z, self.y)
1576 }
1577
1578 pub fn zzzz(self) -> Self {
1579 Self::new(self.z, self.z, self.z, self.z)
1580 }
1581
1582 pub fn zzzw(self) -> Self {
1583 Self::new(self.z, self.z, self.z, self.w)
1584 }
1585
1586 pub fn zzwx(self) -> Self {
1587 Self::new(self.z, self.z, self.w, self.x)
1588 }
1589
1590 pub fn zzwy(self) -> Self {
1591 Self::new(self.z, self.z, self.w, self.y)
1592 }
1593
1594 pub fn zzwz(self) -> Self {
1595 Self::new(self.z, self.z, self.w, self.z)
1596 }
1597
1598 pub fn zzww(self) -> Self {
1599 Self::new(self.z, self.z, self.w, self.w)
1600 }
1601
1602 pub fn zwxx(self) -> Self {
1603 Self::new(self.z, self.w, self.x, self.x)
1604 }
1605
1606 pub fn zwxy(self) -> Self {
1607 Self::new(self.z, self.w, self.x, self.y)
1608 }
1609
1610 pub fn zwxz(self) -> Self {
1611 Self::new(self.z, self.w, self.x, self.z)
1612 }
1613
1614 pub fn zwxw(self) -> Self {
1615 Self::new(self.z, self.w, self.x, self.w)
1616 }
1617
1618 pub fn zwyx(self) -> Self {
1619 Self::new(self.z, self.w, self.y, self.x)
1620 }
1621
1622 pub fn zwyy(self) -> Self {
1623 Self::new(self.z, self.w, self.y, self.y)
1624 }
1625
1626 pub fn zwyz(self) -> Self {
1627 Self::new(self.z, self.w, self.y, self.z)
1628 }
1629
1630 pub fn zwyw(self) -> Self {
1631 Self::new(self.z, self.w, self.y, self.w)
1632 }
1633
1634 pub fn zwzx(self) -> Self {
1635 Self::new(self.z, self.w, self.z, self.x)
1636 }
1637
1638 pub fn zwzy(self) -> Self {
1639 Self::new(self.z, self.w, self.z, self.y)
1640 }
1641
1642 pub fn zwzz(self) -> Self {
1643 Self::new(self.z, self.w, self.z, self.z)
1644 }
1645
1646 pub fn zwzw(self) -> Self {
1647 Self::new(self.z, self.w, self.z, self.w)
1648 }
1649
1650 pub fn zwwx(self) -> Self {
1651 Self::new(self.z, self.w, self.w, self.x)
1652 }
1653
1654 pub fn zwwy(self) -> Self {
1655 Self::new(self.z, self.w, self.w, self.y)
1656 }
1657
1658 pub fn zwwz(self) -> Self {
1659 Self::new(self.z, self.w, self.w, self.z)
1660 }
1661
1662 pub fn zwww(self) -> Self {
1663 Self::new(self.z, self.w, self.w, self.w)
1664 }
1665
1666 pub fn wxxx(self) -> Self {
1667 Self::new(self.w, self.x, self.x, self.x)
1668 }
1669
1670 pub fn wxxy(self) -> Self {
1671 Self::new(self.w, self.x, self.x, self.y)
1672 }
1673
1674 pub fn wxxz(self) -> Self {
1675 Self::new(self.w, self.x, self.x, self.z)
1676 }
1677
1678 pub fn wxxw(self) -> Self {
1679 Self::new(self.w, self.x, self.x, self.w)
1680 }
1681
1682 pub fn wxyx(self) -> Self {
1683 Self::new(self.w, self.x, self.y, self.x)
1684 }
1685
1686 pub fn wxyy(self) -> Self {
1687 Self::new(self.w, self.x, self.y, self.y)
1688 }
1689
1690 pub fn wxyz(self) -> Self {
1691 Self::new(self.w, self.x, self.y, self.z)
1692 }
1693
1694 pub fn wxyw(self) -> Self {
1695 Self::new(self.w, self.x, self.y, self.w)
1696 }
1697
1698 pub fn wxzx(self) -> Self {
1699 Self::new(self.w, self.x, self.z, self.x)
1700 }
1701
1702 pub fn wxzy(self) -> Self {
1703 Self::new(self.w, self.x, self.z, self.y)
1704 }
1705
1706 pub fn wxzz(self) -> Self {
1707 Self::new(self.w, self.x, self.z, self.z)
1708 }
1709
1710 pub fn wxzw(self) -> Self {
1711 Self::new(self.w, self.x, self.z, self.w)
1712 }
1713
1714 pub fn wxwx(self) -> Self {
1715 Self::new(self.w, self.x, self.w, self.x)
1716 }
1717
1718 pub fn wxwy(self) -> Self {
1719 Self::new(self.w, self.x, self.w, self.y)
1720 }
1721
1722 pub fn wxwz(self) -> Self {
1723 Self::new(self.w, self.x, self.w, self.z)
1724 }
1725
1726 pub fn wxww(self) -> Self {
1727 Self::new(self.w, self.x, self.w, self.w)
1728 }
1729
1730 pub fn wyxx(self) -> Self {
1731 Self::new(self.w, self.y, self.x, self.x)
1732 }
1733
1734 pub fn wyxy(self) -> Self {
1735 Self::new(self.w, self.y, self.x, self.y)
1736 }
1737
1738 pub fn wyxz(self) -> Self {
1739 Self::new(self.w, self.y, self.x, self.z)
1740 }
1741
1742 pub fn wyxw(self) -> Self {
1743 Self::new(self.w, self.y, self.x, self.w)
1744 }
1745
1746 pub fn wyyx(self) -> Self {
1747 Self::new(self.w, self.y, self.y, self.x)
1748 }
1749
1750 pub fn wyyy(self) -> Self {
1751 Self::new(self.w, self.y, self.y, self.y)
1752 }
1753
1754 pub fn wyyz(self) -> Self {
1755 Self::new(self.w, self.y, self.y, self.z)
1756 }
1757
1758 pub fn wyyw(self) -> Self {
1759 Self::new(self.w, self.y, self.y, self.w)
1760 }
1761
1762 pub fn wyzx(self) -> Self {
1763 Self::new(self.w, self.y, self.z, self.x)
1764 }
1765
1766 pub fn wyzy(self) -> Self {
1767 Self::new(self.w, self.y, self.z, self.y)
1768 }
1769
1770 pub fn wyzz(self) -> Self {
1771 Self::new(self.w, self.y, self.z, self.z)
1772 }
1773
1774 pub fn wyzw(self) -> Self {
1775 Self::new(self.w, self.y, self.z, self.w)
1776 }
1777
1778 pub fn wywx(self) -> Self {
1779 Self::new(self.w, self.y, self.w, self.x)
1780 }
1781
1782 pub fn wywy(self) -> Self {
1783 Self::new(self.w, self.y, self.w, self.y)
1784 }
1785
1786 pub fn wywz(self) -> Self {
1787 Self::new(self.w, self.y, self.w, self.z)
1788 }
1789
1790 pub fn wyww(self) -> Self {
1791 Self::new(self.w, self.y, self.w, self.w)
1792 }
1793
1794 pub fn wzxx(self) -> Self {
1795 Self::new(self.w, self.z, self.x, self.x)
1796 }
1797
1798 pub fn wzxy(self) -> Self {
1799 Self::new(self.w, self.z, self.x, self.y)
1800 }
1801
1802 pub fn wzxz(self) -> Self {
1803 Self::new(self.w, self.z, self.x, self.z)
1804 }
1805
1806 pub fn wzxw(self) -> Self {
1807 Self::new(self.w, self.z, self.x, self.w)
1808 }
1809
1810 pub fn wzyx(self) -> Self {
1811 Self::new(self.w, self.z, self.y, self.x)
1812 }
1813
1814 pub fn wzyy(self) -> Self {
1815 Self::new(self.w, self.z, self.y, self.y)
1816 }
1817
1818 pub fn wzyz(self) -> Self {
1819 Self::new(self.w, self.z, self.y, self.z)
1820 }
1821
1822 pub fn wzyw(self) -> Self {
1823 Self::new(self.w, self.z, self.y, self.w)
1824 }
1825
1826 pub fn wzzx(self) -> Self {
1827 Self::new(self.w, self.z, self.z, self.x)
1828 }
1829
1830 pub fn wzzy(self) -> Self {
1831 Self::new(self.w, self.z, self.z, self.y)
1832 }
1833
1834 pub fn wzzz(self) -> Self {
1835 Self::new(self.w, self.z, self.z, self.z)
1836 }
1837
1838 pub fn wzzw(self) -> Self {
1839 Self::new(self.w, self.z, self.z, self.w)
1840 }
1841
1842 pub fn wzwx(self) -> Self {
1843 Self::new(self.w, self.z, self.w, self.x)
1844 }
1845
1846 pub fn wzwy(self) -> Self {
1847 Self::new(self.w, self.z, self.w, self.y)
1848 }
1849
1850 pub fn wzwz(self) -> Self {
1851 Self::new(self.w, self.z, self.w, self.z)
1852 }
1853
1854 pub fn wzww(self) -> Self {
1855 Self::new(self.w, self.z, self.w, self.w)
1856 }
1857
1858 pub fn wwxx(self) -> Self {
1859 Self::new(self.w, self.w, self.x, self.x)
1860 }
1861
1862 pub fn wwxy(self) -> Self {
1863 Self::new(self.w, self.w, self.x, self.y)
1864 }
1865
1866 pub fn wwxz(self) -> Self {
1867 Self::new(self.w, self.w, self.x, self.z)
1868 }
1869
1870 pub fn wwxw(self) -> Self {
1871 Self::new(self.w, self.w, self.x, self.w)
1872 }
1873
1874 pub fn wwyx(self) -> Self {
1875 Self::new(self.w, self.w, self.y, self.x)
1876 }
1877
1878 pub fn wwyy(self) -> Self {
1879 Self::new(self.w, self.w, self.y, self.y)
1880 }
1881
1882 pub fn wwyz(self) -> Self {
1883 Self::new(self.w, self.w, self.y, self.z)
1884 }
1885
1886 pub fn wwyw(self) -> Self {
1887 Self::new(self.w, self.w, self.y, self.w)
1888 }
1889
1890 pub fn wwzx(self) -> Self {
1891 Self::new(self.w, self.w, self.z, self.x)
1892 }
1893
1894 pub fn wwzy(self) -> Self {
1895 Self::new(self.w, self.w, self.z, self.y)
1896 }
1897
1898 pub fn wwzz(self) -> Self {
1899 Self::new(self.w, self.w, self.z, self.z)
1900 }
1901
1902 pub fn wwzw(self) -> Self {
1903 Self::new(self.w, self.w, self.z, self.w)
1904 }
1905
1906 pub fn wwwx(self) -> Self {
1907 Self::new(self.w, self.w, self.w, self.x)
1908 }
1909
1910 pub fn wwwy(self) -> Self {
1911 Self::new(self.w, self.w, self.w, self.y)
1912 }
1913
1914 pub fn wwwz(self) -> Self {
1915 Self::new(self.w, self.w, self.w, self.z)
1916 }
1917
1918 pub fn wwww(self) -> Self {
1919 Self::new(self.w, self.w, self.w, self.w)
1920 }
1921}