maths_rs/
swizz.rs

1
2use crate::vec::*;
3use crate::num::*;
4
5/// swizzle combinations of x and y
6pub trait Vec2Swizzle<T: Number>: VecN<T> {
7    fn xx(self) -> Vec2<T>;
8    fn xy(self) -> Vec2<T>;
9    fn yx(self) -> Vec2<T>;
10    fn yy(self) -> Vec2<T>;
11    fn set_xy(&mut self, other: Vec2<T>);
12    fn set_yx(&mut self, other: Vec2<T>);
13}
14
15/// swizzle combinations of xyz
16pub trait Vec3Swizzle<T: Number>: VecN<T> {
17    fn xz(self) -> Vec2<T>;
18    fn yz(self) -> Vec2<T>;
19    fn zx(self) -> Vec2<T>;
20    fn zy(self) -> Vec2<T>;
21    fn zz(self) -> Vec2<T>;
22    fn xxx(self) -> Vec3<T>;
23    fn xxy(self) -> Vec3<T>;
24    fn xxz(self) -> Vec3<T>;
25    fn xyx(self) -> Vec3<T>;
26    fn xyy(self) -> Vec3<T>;
27    fn xyz(self) -> Vec3<T>;
28    fn xzx(self) -> Vec3<T>;
29    fn xzy(self) -> Vec3<T>;
30    fn xzz(self) -> Vec3<T>;
31    fn yxx(self) -> Vec3<T>;
32    fn yxy(self) -> Vec3<T>;
33    fn yxz(self) -> Vec3<T>;
34    fn yyx(self) -> Vec3<T>;
35    fn yyy(self) -> Vec3<T>;
36    fn yyz(self) -> Vec3<T>;
37    fn yzx(self) -> Vec3<T>;
38    fn yzy(self) -> Vec3<T>;
39    fn yzz(self) -> Vec3<T>;
40    fn zxx(self) -> Vec3<T>;
41    fn zxy(self) -> Vec3<T>;
42    fn zxz(self) -> Vec3<T>;
43    fn zyx(self) -> Vec3<T>;
44    fn zyy(self) -> Vec3<T>;
45    fn zyz(self) -> Vec3<T>;
46    fn zzx(self) -> Vec3<T>;
47    fn zzy(self) -> Vec3<T>;
48    fn zzz(self) -> Vec3<T>;
49    fn set_xz(&mut self, other: Vec2<T>);
50    fn set_yz(&mut self, other: Vec2<T>);
51    fn set_zx(&mut self, other: Vec2<T>);
52    fn set_zy(&mut self, other: Vec2<T>);
53    fn set_xyz(&mut self, other: Vec3<T>);
54    fn set_xzy(&mut self, other: Vec3<T>);
55    fn set_yxz(&mut self, other: Vec3<T>);
56    fn set_yzx(&mut self, other: Vec3<T>);
57    fn set_zxy(&mut self, other: Vec3<T>);
58    fn set_zyx(&mut self, other: Vec3<T>);
59}
60
61/// swizzle combinations of xyzw
62pub trait Vec4Swizzle<T: Number>: VecN<T> {
63    fn xw(self) -> Vec2<T>;
64    fn yw(self) -> Vec2<T>;
65    fn zw(self) -> Vec2<T>;
66    fn wx(self) -> Vec2<T>;
67    fn wy(self) -> Vec2<T>;
68    fn wz(self) -> Vec2<T>;
69    fn ww(self) -> Vec2<T>;
70    fn xxw(self) -> Vec3<T>;
71    fn xyw(self) -> Vec3<T>;
72    fn xzw(self) -> Vec3<T>;
73    fn xwx(self) -> Vec3<T>;
74    fn xwy(self) -> Vec3<T>;
75    fn xwz(self) -> Vec3<T>;
76    fn xww(self) -> Vec3<T>;
77    fn yxw(self) -> Vec3<T>;
78    fn yyw(self) -> Vec3<T>;
79    fn yzw(self) -> Vec3<T>;
80    fn ywx(self) -> Vec3<T>;
81    fn ywy(self) -> Vec3<T>;
82    fn ywz(self) -> Vec3<T>;
83    fn yww(self) -> Vec3<T>;
84    fn zxw(self) -> Vec3<T>;
85    fn zyw(self) -> Vec3<T>;
86    fn zzw(self) -> Vec3<T>;
87    fn zwx(self) -> Vec3<T>;
88    fn zwy(self) -> Vec3<T>;
89    fn zwz(self) -> Vec3<T>;
90    fn zww(self) -> Vec3<T>;
91    fn wxx(self) -> Vec3<T>;
92    fn wxy(self) -> Vec3<T>;
93    fn wxz(self) -> Vec3<T>;
94    fn wxw(self) -> Vec3<T>;
95    fn wyx(self) -> Vec3<T>;
96    fn wyy(self) -> Vec3<T>;
97    fn wyz(self) -> Vec3<T>;
98    fn wyw(self) -> Vec3<T>;
99    fn wzx(self) -> Vec3<T>;
100    fn wzy(self) -> Vec3<T>;
101    fn wzz(self) -> Vec3<T>;
102    fn wzw(self) -> Vec3<T>;
103    fn wwx(self) -> Vec3<T>;
104    fn wwy(self) -> Vec3<T>;
105    fn wwz(self) -> Vec3<T>;
106    fn www(self) -> Vec3<T>;
107    fn xxxx(self) -> Vec4<T>;
108    fn xxxy(self) -> Vec4<T>;
109    fn xxxz(self) -> Vec4<T>;
110    fn xxxw(self) -> Vec4<T>;
111    fn xxyx(self) -> Vec4<T>;
112    fn xxyy(self) -> Vec4<T>;
113    fn xxyz(self) -> Vec4<T>;
114    fn xxyw(self) -> Vec4<T>;
115    fn xxzx(self) -> Vec4<T>;
116    fn xxzy(self) -> Vec4<T>;
117    fn xxzz(self) -> Vec4<T>;
118    fn xxzw(self) -> Vec4<T>;
119    fn xxwx(self) -> Vec4<T>;
120    fn xxwy(self) -> Vec4<T>;
121    fn xxwz(self) -> Vec4<T>;
122    fn xxww(self) -> Vec4<T>;
123    fn xyxx(self) -> Vec4<T>;
124    fn xyxy(self) -> Vec4<T>;
125    fn xyxz(self) -> Vec4<T>;
126    fn xyxw(self) -> Vec4<T>;
127    fn xyyx(self) -> Vec4<T>;
128    fn xyyy(self) -> Vec4<T>;
129    fn xyyz(self) -> Vec4<T>;
130    fn xyyw(self) -> Vec4<T>;
131    fn xyzx(self) -> Vec4<T>;
132    fn xyzy(self) -> Vec4<T>;
133    fn xyzz(self) -> Vec4<T>;
134    fn xyzw(self) -> Vec4<T>;
135    fn xywx(self) -> Vec4<T>;
136    fn xywy(self) -> Vec4<T>;
137    fn xywz(self) -> Vec4<T>;
138    fn xyww(self) -> Vec4<T>;
139    fn xzxx(self) -> Vec4<T>;
140    fn xzxy(self) -> Vec4<T>;
141    fn xzxz(self) -> Vec4<T>;
142    fn xzxw(self) -> Vec4<T>;
143    fn xzyx(self) -> Vec4<T>;
144    fn xzyy(self) -> Vec4<T>;
145    fn xzyz(self) -> Vec4<T>;
146    fn xzyw(self) -> Vec4<T>;
147    fn xzzx(self) -> Vec4<T>;
148    fn xzzy(self) -> Vec4<T>;
149    fn xzzz(self) -> Vec4<T>;
150    fn xzzw(self) -> Vec4<T>;
151    fn xzwx(self) -> Vec4<T>;
152    fn xzwy(self) -> Vec4<T>;
153    fn xzwz(self) -> Vec4<T>;
154    fn xzww(self) -> Vec4<T>;
155    fn xwxx(self) -> Vec4<T>;
156    fn xwxy(self) -> Vec4<T>;
157    fn xwxz(self) -> Vec4<T>;
158    fn xwxw(self) -> Vec4<T>;
159    fn xwyx(self) -> Vec4<T>;
160    fn xwyy(self) -> Vec4<T>;
161    fn xwyz(self) -> Vec4<T>;
162    fn xwyw(self) -> Vec4<T>;
163    fn xwzx(self) -> Vec4<T>;
164    fn xwzy(self) -> Vec4<T>;
165    fn xwzz(self) -> Vec4<T>;
166    fn xwzw(self) -> Vec4<T>;
167    fn xwwx(self) -> Vec4<T>;
168    fn xwwy(self) -> Vec4<T>;
169    fn xwwz(self) -> Vec4<T>;
170    fn xwww(self) -> Vec4<T>;
171    fn yxxx(self) -> Vec4<T>;
172    fn yxxy(self) -> Vec4<T>;
173    fn yxxz(self) -> Vec4<T>;
174    fn yxxw(self) -> Vec4<T>;
175    fn yxyx(self) -> Vec4<T>;
176    fn yxyy(self) -> Vec4<T>;
177    fn yxyz(self) -> Vec4<T>;
178    fn yxyw(self) -> Vec4<T>;
179    fn yxzx(self) -> Vec4<T>;
180    fn yxzy(self) -> Vec4<T>;
181    fn yxzz(self) -> Vec4<T>;
182    fn yxzw(self) -> Vec4<T>;
183    fn yxwx(self) -> Vec4<T>;
184    fn yxwy(self) -> Vec4<T>;
185    fn yxwz(self) -> Vec4<T>;
186    fn yxww(self) -> Vec4<T>;
187    fn yyxx(self) -> Vec4<T>;
188    fn yyxy(self) -> Vec4<T>;
189    fn yyxz(self) -> Vec4<T>;
190    fn yyxw(self) -> Vec4<T>;
191    fn yyyx(self) -> Vec4<T>;
192    fn yyyy(self) -> Vec4<T>;
193    fn yyyz(self) -> Vec4<T>;
194    fn yyyw(self) -> Vec4<T>;
195    fn yyzx(self) -> Vec4<T>;
196    fn yyzy(self) -> Vec4<T>;
197    fn yyzz(self) -> Vec4<T>;
198    fn yyzw(self) -> Vec4<T>;
199    fn yywx(self) -> Vec4<T>;
200    fn yywy(self) -> Vec4<T>;
201    fn yywz(self) -> Vec4<T>;
202    fn yyww(self) -> Vec4<T>;
203    fn yzxx(self) -> Vec4<T>;
204    fn yzxy(self) -> Vec4<T>;
205    fn yzxz(self) -> Vec4<T>;
206    fn yzxw(self) -> Vec4<T>;
207    fn yzyx(self) -> Vec4<T>;
208    fn yzyy(self) -> Vec4<T>;
209    fn yzyz(self) -> Vec4<T>;
210    fn yzyw(self) -> Vec4<T>;
211    fn yzzx(self) -> Vec4<T>;
212    fn yzzy(self) -> Vec4<T>;
213    fn yzzz(self) -> Vec4<T>;
214    fn yzzw(self) -> Vec4<T>;
215    fn yzwx(self) -> Vec4<T>;
216    fn yzwy(self) -> Vec4<T>;
217    fn yzwz(self) -> Vec4<T>;
218    fn yzww(self) -> Vec4<T>;
219    fn ywxx(self) -> Vec4<T>;
220    fn ywxy(self) -> Vec4<T>;
221    fn ywxz(self) -> Vec4<T>;
222    fn ywxw(self) -> Vec4<T>;
223    fn ywyx(self) -> Vec4<T>;
224    fn ywyy(self) -> Vec4<T>;
225    fn ywyz(self) -> Vec4<T>;
226    fn ywyw(self) -> Vec4<T>;
227    fn ywzx(self) -> Vec4<T>;
228    fn ywzy(self) -> Vec4<T>;
229    fn ywzz(self) -> Vec4<T>;
230    fn ywzw(self) -> Vec4<T>;
231    fn ywwx(self) -> Vec4<T>;
232    fn ywwy(self) -> Vec4<T>;
233    fn ywwz(self) -> Vec4<T>;
234    fn ywww(self) -> Vec4<T>;
235    fn zxxx(self) -> Vec4<T>;
236    fn zxxy(self) -> Vec4<T>;
237    fn zxxz(self) -> Vec4<T>;
238    fn zxxw(self) -> Vec4<T>;
239    fn zxyx(self) -> Vec4<T>;
240    fn zxyy(self) -> Vec4<T>;
241    fn zxyz(self) -> Vec4<T>;
242    fn zxyw(self) -> Vec4<T>;
243    fn zxzx(self) -> Vec4<T>;
244    fn zxzy(self) -> Vec4<T>;
245    fn zxzz(self) -> Vec4<T>;
246    fn zxzw(self) -> Vec4<T>;
247    fn zxwx(self) -> Vec4<T>;
248    fn zxwy(self) -> Vec4<T>;
249    fn zxwz(self) -> Vec4<T>;
250    fn zxww(self) -> Vec4<T>;
251    fn zyxx(self) -> Vec4<T>;
252    fn zyxy(self) -> Vec4<T>;
253    fn zyxz(self) -> Vec4<T>;
254    fn zyxw(self) -> Vec4<T>;
255    fn zyyx(self) -> Vec4<T>;
256    fn zyyy(self) -> Vec4<T>;
257    fn zyyz(self) -> Vec4<T>;
258    fn zyyw(self) -> Vec4<T>;
259    fn zyzx(self) -> Vec4<T>;
260    fn zyzy(self) -> Vec4<T>;
261    fn zyzz(self) -> Vec4<T>;
262    fn zyzw(self) -> Vec4<T>;
263    fn zywx(self) -> Vec4<T>;
264    fn zywy(self) -> Vec4<T>;
265    fn zywz(self) -> Vec4<T>;
266    fn zyww(self) -> Vec4<T>;
267    fn zzxx(self) -> Vec4<T>;
268    fn zzxy(self) -> Vec4<T>;
269    fn zzxz(self) -> Vec4<T>;
270    fn zzxw(self) -> Vec4<T>;
271    fn zzyx(self) -> Vec4<T>;
272    fn zzyy(self) -> Vec4<T>;
273    fn zzyz(self) -> Vec4<T>;
274    fn zzyw(self) -> Vec4<T>;
275    fn zzzx(self) -> Vec4<T>;
276    fn zzzy(self) -> Vec4<T>;
277    fn zzzz(self) -> Vec4<T>;
278    fn zzzw(self) -> Vec4<T>;
279    fn zzwx(self) -> Vec4<T>;
280    fn zzwy(self) -> Vec4<T>;
281    fn zzwz(self) -> Vec4<T>;
282    fn zzww(self) -> Vec4<T>;
283    fn zwxx(self) -> Vec4<T>;
284    fn zwxy(self) -> Vec4<T>;
285    fn zwxz(self) -> Vec4<T>;
286    fn zwxw(self) -> Vec4<T>;
287    fn zwyx(self) -> Vec4<T>;
288    fn zwyy(self) -> Vec4<T>;
289    fn zwyz(self) -> Vec4<T>;
290    fn zwyw(self) -> Vec4<T>;
291    fn zwzx(self) -> Vec4<T>;
292    fn zwzy(self) -> Vec4<T>;
293    fn zwzz(self) -> Vec4<T>;
294    fn zwzw(self) -> Vec4<T>;
295    fn zwwx(self) -> Vec4<T>;
296    fn zwwy(self) -> Vec4<T>;
297    fn zwwz(self) -> Vec4<T>;
298    fn zwww(self) -> Vec4<T>;
299    fn wxxx(self) -> Vec4<T>;
300    fn wxxy(self) -> Vec4<T>;
301    fn wxxz(self) -> Vec4<T>;
302    fn wxxw(self) -> Vec4<T>;
303    fn wxyx(self) -> Vec4<T>;
304    fn wxyy(self) -> Vec4<T>;
305    fn wxyz(self) -> Vec4<T>;
306    fn wxyw(self) -> Vec4<T>;
307    fn wxzx(self) -> Vec4<T>;
308    fn wxzy(self) -> Vec4<T>;
309    fn wxzz(self) -> Vec4<T>;
310    fn wxzw(self) -> Vec4<T>;
311    fn wxwx(self) -> Vec4<T>;
312    fn wxwy(self) -> Vec4<T>;
313    fn wxwz(self) -> Vec4<T>;
314    fn wxww(self) -> Vec4<T>;
315    fn wyxx(self) -> Vec4<T>;
316    fn wyxy(self) -> Vec4<T>;
317    fn wyxz(self) -> Vec4<T>;
318    fn wyxw(self) -> Vec4<T>;
319    fn wyyx(self) -> Vec4<T>;
320    fn wyyy(self) -> Vec4<T>;
321    fn wyyz(self) -> Vec4<T>;
322    fn wyyw(self) -> Vec4<T>;
323    fn wyzx(self) -> Vec4<T>;
324    fn wyzy(self) -> Vec4<T>;
325    fn wyzz(self) -> Vec4<T>;
326    fn wyzw(self) -> Vec4<T>;
327    fn wywx(self) -> Vec4<T>;
328    fn wywy(self) -> Vec4<T>;
329    fn wywz(self) -> Vec4<T>;
330    fn wyww(self) -> Vec4<T>;
331    fn wzxx(self) -> Vec4<T>;
332    fn wzxy(self) -> Vec4<T>;
333    fn wzxz(self) -> Vec4<T>;
334    fn wzxw(self) -> Vec4<T>;
335    fn wzyx(self) -> Vec4<T>;
336    fn wzyy(self) -> Vec4<T>;
337    fn wzyz(self) -> Vec4<T>;
338    fn wzyw(self) -> Vec4<T>;
339    fn wzzx(self) -> Vec4<T>;
340    fn wzzy(self) -> Vec4<T>;
341    fn wzzz(self) -> Vec4<T>;
342    fn wzzw(self) -> Vec4<T>;
343    fn wzwx(self) -> Vec4<T>;
344    fn wzwy(self) -> Vec4<T>;
345    fn wzwz(self) -> Vec4<T>;
346    fn wzww(self) -> Vec4<T>;
347    fn wwxx(self) -> Vec4<T>;
348    fn wwxy(self) -> Vec4<T>;
349    fn wwxz(self) -> Vec4<T>;
350    fn wwxw(self) -> Vec4<T>;
351    fn wwyx(self) -> Vec4<T>;
352    fn wwyy(self) -> Vec4<T>;
353    fn wwyz(self) -> Vec4<T>;
354    fn wwyw(self) -> Vec4<T>;
355    fn wwzx(self) -> Vec4<T>;
356    fn wwzy(self) -> Vec4<T>;
357    fn wwzz(self) -> Vec4<T>;
358    fn wwzw(self) -> Vec4<T>;
359    fn wwwx(self) -> Vec4<T>;
360    fn wwwy(self) -> Vec4<T>;
361    fn wwwz(self) -> Vec4<T>;
362    fn wwww(self) -> Vec4<T>;
363    fn set_xw(&mut self, other: Vec2<T>);
364    fn set_yw(&mut self, other: Vec2<T>);
365    fn set_zw(&mut self, other: Vec2<T>);
366    fn set_wx(&mut self, other: Vec2<T>);
367    fn set_wy(&mut self, other: Vec2<T>);
368    fn set_wz(&mut self, other: Vec2<T>);
369    fn set_xyw(&mut self, other: Vec3<T>);
370    fn set_xzw(&mut self, other: Vec3<T>);
371    fn set_xwy(&mut self, other: Vec3<T>);
372    fn set_xwz(&mut self, other: Vec3<T>);
373    fn set_yxw(&mut self, other: Vec3<T>);
374    fn set_yzw(&mut self, other: Vec3<T>);
375    fn set_ywx(&mut self, other: Vec3<T>);
376    fn set_ywz(&mut self, other: Vec3<T>);
377    fn set_zxw(&mut self, other: Vec3<T>);
378    fn set_zyw(&mut self, other: Vec3<T>);
379    fn set_zwx(&mut self, other: Vec3<T>);
380    fn set_zwy(&mut self, other: Vec3<T>);
381    fn set_wxy(&mut self, other: Vec3<T>);
382    fn set_wxz(&mut self, other: Vec3<T>);
383    fn set_wyx(&mut self, other: Vec3<T>);
384    fn set_wyz(&mut self, other: Vec3<T>);
385    fn set_wzx(&mut self, other: Vec3<T>);
386    fn set_wzy(&mut self, other: Vec3<T>);
387    fn set_xyzw(&mut self, other: Vec4<T>);
388    fn set_xywz(&mut self, other: Vec4<T>);
389    fn set_xzyw(&mut self, other: Vec4<T>);
390    fn set_xzwy(&mut self, other: Vec4<T>);
391    fn set_xwyz(&mut self, other: Vec4<T>);
392    fn set_xwzy(&mut self, other: Vec4<T>);
393    fn set_yxzw(&mut self, other: Vec4<T>);
394    fn set_yxwz(&mut self, other: Vec4<T>);
395    fn set_yzxw(&mut self, other: Vec4<T>);
396    fn set_yzwx(&mut self, other: Vec4<T>);
397    fn set_ywxz(&mut self, other: Vec4<T>);
398    fn set_ywzx(&mut self, other: Vec4<T>);
399    fn set_zxyw(&mut self, other: Vec4<T>);
400    fn set_zxwy(&mut self, other: Vec4<T>);
401    fn set_zyxw(&mut self, other: Vec4<T>);
402    fn set_zywx(&mut self, other: Vec4<T>);
403    fn set_zwxy(&mut self, other: Vec4<T>);
404    fn set_zwyx(&mut self, other: Vec4<T>);
405    fn set_wxyz(&mut self, other: Vec4<T>);
406    fn set_wxzy(&mut self, other: Vec4<T>);
407    fn set_wyxz(&mut self, other: Vec4<T>);
408    fn set_wyzx(&mut self, other: Vec4<T>);
409    fn set_wzxy(&mut self, other: Vec4<T>);
410    fn set_wzyx(&mut self, other: Vec4<T>);
411}
412
413macro_rules! v2_swizzle_impl {
414    ($VecN:ident) => {
415        impl<T> Vec2Swizzle<T> for $VecN<T> where T: Number {
416            fn xx(self) -> Vec2<T> {
417                Vec2 {
418                    x: self.x,
419                    y: self.x
420                }
421            }
422
423            fn xy(self) -> Vec2<T> {
424                Vec2 {
425                    x: self.x,
426                    y: self.y
427                }
428            }
429
430            fn yx(self) -> Vec2<T> {
431                Vec2 {
432                    x: self.y,
433                    y: self.x
434                }
435            }
436
437            fn yy(self) -> Vec2<T> {
438                Vec2 {
439                    x: self.y,
440                    y: self.y
441                }
442            }
443
444            fn set_xy(&mut self, other: Vec2<T>) {
445                self.x = other.x;
446                self.y = other.y;
447            }
448
449            fn set_yx(&mut self, other: Vec2<T>) {
450                self.x = other.y;
451                self.y = other.x;
452            }
453        }
454    }
455}
456
457macro_rules! v3_swizzle_impl {
458    ($VecN:ident) => {
459        impl<T> Vec3Swizzle<T> for $VecN<T> where T: Number {
460            fn xz(self) -> Vec2<T> {
461                Vec2::new(self.x, self.z)
462            }
463
464            fn yz(self) -> Vec2<T> {
465                Vec2::new(self.y, self.z)
466            }
467
468            fn zx(self) -> Vec2<T> {
469                Vec2::new(self.z, self.x)
470            }
471
472            fn zy(self) -> Vec2<T> {
473                Vec2::new(self.z, self.y)
474            }
475
476            fn zz(self) -> Vec2<T> {
477                Vec2::new(self.z, self.z)
478            }
479
480            fn xxx(self) -> Vec3<T> {
481                Vec3 {
482                    x: self.x,
483                    y: self.x,
484                    z: self.x,
485                }
486            }
487
488            fn xxy(self) -> Vec3<T> {
489                Vec3 {
490                    x: self.x,
491                    y: self.x,
492                    z: self.y,
493                }
494            }
495
496            fn xxz(self) -> Vec3<T> {
497                Vec3 {
498                    x: self.x,
499                    y: self.x,
500                    z: self.z,
501                }
502            }
503
504            fn xyx(self) -> Vec3<T> {
505                Vec3 {
506                    x: self.x,
507                    y: self.y,
508                    z: self.x,
509                }
510            }
511
512            fn xyy(self) -> Vec3<T> {
513                Vec3 {
514                    x: self.x,
515                    y: self.y,
516                    z: self.y,
517                }
518            }
519
520            fn xyz(self) -> Vec3<T> {
521                Vec3 {
522                    x: self.x,
523                    y: self.y,
524                    z: self.z,
525                }
526            }
527
528            fn xzx(self) -> Vec3<T> {
529                Vec3 {
530                    x: self.x,
531                    y: self.z,
532                    z: self.x,
533                }
534            }
535
536            fn xzy(self) -> Vec3<T> {
537                Vec3 {
538                    x: self.x,
539                    y: self.z,
540                    z: self.y,
541                }
542            }
543
544            fn xzz(self) -> Vec3<T> {
545                Vec3 {
546                    x: self.x,
547                    y: self.z,
548                    z: self.z,
549                }
550            }
551
552            fn yxx(self) -> Vec3<T> {
553                Vec3 {
554                    x: self.y,
555                    y: self.x,
556                    z: self.x,
557                }
558            }
559
560            fn yxy(self) -> Vec3<T> {
561                Vec3 {
562                    x: self.y,
563                    y: self.x,
564                    z: self.y,
565                }
566            }
567
568            fn yxz(self) -> Vec3<T> {
569                Vec3 {
570                    x: self.y,
571                    y: self.x,
572                    z: self.z,
573                }
574            }
575
576            fn yyx(self) -> Vec3<T> {
577                Vec3 {
578                    x: self.y,
579                    y: self.y,
580                    z: self.x,
581                }
582            }
583
584            fn yyy(self) -> Vec3<T> {
585                Vec3 {
586                    x: self.y,
587                    y: self.y,
588                    z: self.y,
589                }
590            }
591
592            fn yyz(self) -> Vec3<T> {
593                Vec3 {
594                    x: self.y,
595                    y: self.y,
596                    z: self.z,
597                }
598            }
599
600            fn yzx(self) -> Vec3<T> {
601                Vec3 {
602                    x: self.y,
603                    y: self.z,
604                    z: self.x,
605                }
606            }
607
608            fn yzy(self) -> Vec3<T> {
609                Vec3 {
610                    x: self.y,
611                    y: self.z,
612                    z: self.y,
613                }
614            }
615
616            fn yzz(self) -> Vec3<T> {
617                Vec3 {
618                    x: self.y,
619                    y: self.z,
620                    z: self.z,
621                }
622            }
623
624            fn zxx(self) -> Vec3<T> {
625                Vec3 {
626                    x: self.z,
627                    y: self.x,
628                    z: self.x,
629                }
630            }
631
632            fn zxy(self) -> Vec3<T> {
633                Vec3 {
634                    x: self.z,
635                    y: self.x,
636                    z: self.y,
637                }
638            }
639
640            fn zxz(self) -> Vec3<T> {
641                Vec3 {
642                    x: self.z,
643                    y: self.x,
644                    z: self.z,
645                }
646            }
647
648            fn zyx(self) -> Vec3<T> {
649                Vec3 {
650                    x: self.z,
651                    y: self.y,
652                    z: self.x,
653                }
654            }
655
656            fn zyy(self) -> Vec3<T> {
657                Vec3 {
658                    x: self.z,
659                    y: self.y,
660                    z: self.y,
661                }
662            }
663
664            fn zyz(self) -> Vec3<T> {
665                Vec3 {
666                    x: self.z,
667                    y: self.y,
668                    z: self.z,
669                }
670            }
671
672            fn zzx(self) -> Vec3<T> {
673                Vec3 {
674                    x: self.z,
675                    y: self.z,
676                    z: self.x,
677                }
678            }
679
680            fn zzy(self) -> Vec3<T> {
681                Vec3 {
682                    x: self.z,
683                    y: self.z,
684                    z: self.y,
685                }
686            }
687
688            fn zzz(self) -> Vec3<T> {
689                Vec3 {
690                    x: self.z,
691                    y: self.z,
692                    z: self.z,
693                }
694            }
695
696            fn set_xz(&mut self, other: Vec2<T>) {
697                self.x = other.x; self.z = other.y;
698            }
699
700            fn set_yz(&mut self, other: Vec2<T>) {
701                self.y = other.x; self.z = other.y;
702            }
703
704            fn set_zx(&mut self, other: Vec2<T>) {
705                self.z = other.x; self.x = other.y;
706            }
707
708            fn set_zy(&mut self, other: Vec2<T>) {
709                self.z = other.x; self.y = other.y;
710            }
711
712            fn set_xyz(&mut self, other: Vec3<T>) {
713                self.x = other.x;
714                self.y = other.y;
715                self.z = other.z;
716            }
717
718            fn set_xzy(&mut self, other: Vec3<T>) {
719                self.x = other.x;
720                self.y = other.z;
721                self.z = other.y;
722            }
723
724            fn set_yxz(&mut self, other: Vec3<T>) {
725                self.x = other.y;
726                self.y = other.x;
727                self.z = other.z;
728            }
729
730            fn set_yzx(&mut self, other: Vec3<T>) {
731                self.x = other.y;
732                self.y = other.z;
733                self.z = other.x;
734            }
735
736            fn set_zxy(&mut self, other: Vec3<T>) {
737                self.x = other.z;
738                self.y = other.x;
739                self.z = other.y;
740            }
741
742            fn set_zyx(&mut self, other: Vec3<T>) {
743                self.x = other.z;
744                self.y = other.y;
745                self.z = other.x;
746            }
747        }
748    }
749}
750
751macro_rules! v4_swizzle_impl {
752    ($VecN:ident) => {
753        impl<T> Vec4Swizzle<T> for $VecN<T> where T: Number {
754            fn xw(self) -> Vec2<T> {
755                Vec2::new(self.x, self.w)
756            }
757
758            fn yw(self) -> Vec2<T> {
759                Vec2::new(self.y, self.w)
760            }
761
762            fn zw(self) -> Vec2<T> {
763                Vec2::new(self.z, self.w)
764            }
765
766            fn wx(self) -> Vec2<T> {
767                Vec2::new(self.w, self.x)
768            }
769
770            fn wy(self) -> Vec2<T> {
771                Vec2::new(self.w, self.y)
772            }
773
774            fn wz(self) -> Vec2<T> {
775                Vec2::new(self.w, self.z)
776            }
777
778            fn ww(self) -> Vec2<T> {
779                Vec2::new(self.w, self.w)
780            }
781
782            fn xxw(self) -> Vec3<T> {
783                Vec3::new(self.x, self.x, self.w)
784            }
785
786            fn xyw(self) -> Vec3<T> {
787                Vec3::new(self.x, self.y, self.w)
788            }
789
790            fn xzw(self) -> Vec3<T> {
791                Vec3::new(self.x, self.z, self.w)
792            }
793
794            fn xwx(self) -> Vec3<T> {
795                Vec3::new(self.x, self.w, self.x)
796            }
797
798            fn xwy(self) -> Vec3<T> {
799                Vec3::new(self.x, self.w, self.y)
800            }
801
802            fn xwz(self) -> Vec3<T> {
803                Vec3::new(self.x, self.w, self.z)
804            }
805
806            fn xww(self) -> Vec3<T> {
807                Vec3::new(self.x, self.w, self.w)
808            }
809
810            fn yxw(self) -> Vec3<T> {
811                Vec3::new(self.y, self.x, self.w)
812            }
813
814            fn yyw(self) -> Vec3<T> {
815                Vec3::new(self.y, self.y, self.w)
816            }
817
818            fn yzw(self) -> Vec3<T> {
819                Vec3::new(self.y, self.z, self.w)
820            }
821
822            fn ywx(self) -> Vec3<T> {
823                Vec3::new(self.y, self.w, self.x)
824            }
825
826            fn ywy(self) -> Vec3<T> {
827                Vec3::new(self.y, self.w, self.y)
828            }
829
830            fn ywz(self) -> Vec3<T> {
831                Vec3::new(self.y, self.w, self.z)
832            }
833
834            fn yww(self) -> Vec3<T> {
835                Vec3::new(self.y, self.w, self.w)
836            }
837
838            fn zxw(self) -> Vec3<T> {
839                Vec3::new(self.z, self.x, self.w)
840            }
841
842            fn zyw(self) -> Vec3<T> {
843                Vec3::new(self.z, self.y, self.w)
844            }
845
846            fn zzw(self) -> Vec3<T> {
847                Vec3::new(self.z, self.z, self.w)
848            }
849
850            fn zwx(self) -> Vec3<T> {
851                Vec3::new(self.z, self.w, self.x)
852            }
853
854            fn zwy(self) -> Vec3<T> {
855                Vec3::new(self.z, self.w, self.y)
856            }
857
858            fn zwz(self) -> Vec3<T> {
859                Vec3::new(self.z, self.w, self.z)
860            }
861
862            fn zww(self) -> Vec3<T> {
863                Vec3::new(self.z, self.w, self.w)
864            }
865
866            fn wxx(self) -> Vec3<T> {
867                Vec3::new(self.w, self.x, self.x)
868            }
869
870            fn wxy(self) -> Vec3<T> {
871                Vec3::new(self.w, self.x, self.y)
872            }
873
874            fn wxz(self) -> Vec3<T> {
875                Vec3::new(self.w, self.x, self.z)
876            }
877
878            fn wxw(self) -> Vec3<T> {
879                Vec3::new(self.w, self.x, self.w)
880            }
881
882            fn wyx(self) -> Vec3<T> {
883                Vec3::new(self.w, self.y, self.x)
884            }
885
886            fn wyy(self) -> Vec3<T> {
887                Vec3::new(self.w, self.y, self.y)
888            }
889
890            fn wyz(self) -> Vec3<T> {
891                Vec3::new(self.w, self.y, self.z)
892            }
893
894            fn wyw(self) -> Vec3<T> {
895                Vec3::new(self.w, self.y, self.w)
896            }
897
898            fn wzx(self) -> Vec3<T> {
899                Vec3::new(self.w, self.z, self.x)
900            }
901
902            fn wzy(self) -> Vec3<T> {
903                Vec3::new(self.w, self.z, self.y)
904            }
905
906            fn wzz(self) -> Vec3<T> {
907                Vec3::new(self.w, self.z, self.z)
908            }
909
910            fn wzw(self) -> Vec3<T> {
911                Vec3::new(self.w, self.z, self.w)
912            }
913
914            fn wwx(self) -> Vec3<T> {
915                Vec3::new(self.w, self.w, self.x)
916            }
917
918            fn wwy(self) -> Vec3<T> {
919                Vec3::new(self.w, self.w, self.y)
920            }
921
922            fn wwz(self) -> Vec3<T> {
923                Vec3::new(self.w, self.w, self.z)
924            }
925
926            fn www(self) -> Vec3<T> {
927                Vec3::new(self.w, self.w, self.w)
928            }
929
930            fn xxxx(self) -> Vec4<T> {
931                Vec4 {
932                    x: self.x,
933                    y: self.x,
934                    z: self.x,
935                    w: self.x,
936                }
937            }
938
939            fn xxxy(self) -> Vec4<T> {
940                Vec4 {
941                    x: self.x,
942                    y: self.x,
943                    z: self.x,
944                    w: self.y,
945                }
946            }
947
948            fn xxxz(self) -> Vec4<T> {
949                Vec4 {
950                    x: self.x,
951                    y: self.x,
952                    z: self.x,
953                    w: self.z,
954                }
955            }
956
957            fn xxxw(self) -> Vec4<T> {
958                Vec4 {
959                    x: self.x,
960                    y: self.x,
961                    z: self.x,
962                    w: self.w,
963                }
964            }
965
966            fn xxyx(self) -> Vec4<T> {
967                Vec4 {
968                    x: self.x,
969                    y: self.x,
970                    z: self.y,
971                    w: self.x,
972                }
973            }
974
975            fn xxyy(self) -> Vec4<T> {
976                Vec4 {
977                    x: self.x,
978                    y: self.x,
979                    z: self.y,
980                    w: self.y,
981                }
982            }
983
984            fn xxyz(self) -> Vec4<T> {
985                Vec4 {
986                    x: self.x,
987                    y: self.x,
988                    z: self.y,
989                    w: self.z,
990                }
991            }
992
993            fn xxyw(self) -> Vec4<T> {
994                Vec4 {
995                    x: self.x,
996                    y: self.x,
997                    z: self.y,
998                    w: self.w,
999                }
1000            }
1001
1002            fn xxzx(self) -> Vec4<T> {
1003                Vec4 {
1004                    x: self.x,
1005                    y: self.x,
1006                    z: self.z,
1007                    w: self.x,
1008                }
1009            }
1010
1011            fn xxzy(self) -> Vec4<T> {
1012                Vec4 {
1013                    x: self.x,
1014                    y: self.x,
1015                    z: self.z,
1016                    w: self.y,
1017                }
1018            }
1019
1020            fn xxzz(self) -> Vec4<T> {
1021                Vec4 {
1022                    x: self.x,
1023                    y: self.x,
1024                    z: self.z,
1025                    w: self.z,
1026                }
1027            }
1028
1029            fn xxzw(self) -> Vec4<T> {
1030                Vec4 {
1031                    x: self.x,
1032                    y: self.x,
1033                    z: self.z,
1034                    w: self.w,
1035                }
1036            }
1037
1038            fn xxwx(self) -> Vec4<T> {
1039                Vec4 {
1040                    x: self.x,
1041                    y: self.x,
1042                    z: self.w,
1043                    w: self.x,
1044                }
1045            }
1046
1047            fn xxwy(self) -> Vec4<T> {
1048                Vec4 {
1049                    x: self.x,
1050                    y: self.x,
1051                    z: self.w,
1052                    w: self.y,
1053                }
1054            }
1055
1056            fn xxwz(self) -> Vec4<T> {
1057                Vec4 {
1058                    x: self.x,
1059                    y: self.x,
1060                    z: self.w,
1061                    w: self.z,
1062                }
1063            }
1064
1065            fn xxww(self) -> Vec4<T> {
1066                Vec4 {
1067                    x: self.x,
1068                    y: self.x,
1069                    z: self.w,
1070                    w: self.w,
1071                }
1072            }
1073
1074            fn xyxx(self) -> Vec4<T> {
1075                Vec4 {
1076                    x: self.x,
1077                    y: self.y,
1078                    z: self.x,
1079                    w: self.x,
1080                }
1081            }
1082
1083            fn xyxy(self) -> Vec4<T> {
1084                Vec4 {
1085                    x: self.x,
1086                    y: self.y,
1087                    z: self.x,
1088                    w: self.y,
1089                }
1090            }
1091
1092            fn xyxz(self) -> Vec4<T> {
1093                Vec4 {
1094                    x: self.x,
1095                    y: self.y,
1096                    z: self.x,
1097                    w: self.z,
1098                }
1099            }
1100
1101            fn xyxw(self) -> Vec4<T> {
1102                Vec4 {
1103                    x: self.x,
1104                    y: self.y,
1105                    z: self.x,
1106                    w: self.w,
1107                }
1108            }
1109
1110            fn xyyx(self) -> Vec4<T> {
1111                Vec4 {
1112                    x: self.x,
1113                    y: self.y,
1114                    z: self.y,
1115                    w: self.x,
1116                }
1117            }
1118
1119            fn xyyy(self) -> Vec4<T> {
1120                Vec4 {
1121                    x: self.x,
1122                    y: self.y,
1123                    z: self.y,
1124                    w: self.y,
1125                }
1126            }
1127
1128            fn xyyz(self) -> Vec4<T> {
1129                Vec4 {
1130                    x: self.x,
1131                    y: self.y,
1132                    z: self.y,
1133                    w: self.z,
1134                }
1135            }
1136
1137            fn xyyw(self) -> Vec4<T> {
1138                Vec4 {
1139                    x: self.x,
1140                    y: self.y,
1141                    z: self.y,
1142                    w: self.w,
1143                }
1144            }
1145
1146            fn xyzx(self) -> Vec4<T> {
1147                Vec4 {
1148                    x: self.x,
1149                    y: self.y,
1150                    z: self.z,
1151                    w: self.x,
1152                }
1153            }
1154
1155            fn xyzy(self) -> Vec4<T> {
1156                Vec4 {
1157                    x: self.x,
1158                    y: self.y,
1159                    z: self.z,
1160                    w: self.y,
1161                }
1162            }
1163
1164            fn xyzz(self) -> Vec4<T> {
1165                Vec4 {
1166                    x: self.x,
1167                    y: self.y,
1168                    z: self.z,
1169                    w: self.z,
1170                }
1171            }
1172
1173            fn xyzw(self) -> Vec4<T> {
1174                Vec4 {
1175                    x: self.x,
1176                    y: self.y,
1177                    z: self.z,
1178                    w: self.w,
1179                }
1180            }
1181
1182            fn xywx(self) -> Vec4<T> {
1183                Vec4 {
1184                    x: self.x,
1185                    y: self.y,
1186                    z: self.w,
1187                    w: self.x,
1188                }
1189            }
1190
1191            fn xywy(self) -> Vec4<T> {
1192                Vec4 {
1193                    x: self.x,
1194                    y: self.y,
1195                    z: self.w,
1196                    w: self.y,
1197                }
1198            }
1199
1200            fn xywz(self) -> Vec4<T> {
1201                Vec4 {
1202                    x: self.x,
1203                    y: self.y,
1204                    z: self.w,
1205                    w: self.z,
1206                }
1207            }
1208
1209            fn xyww(self) -> Vec4<T> {
1210                Vec4 {
1211                    x: self.x,
1212                    y: self.y,
1213                    z: self.w,
1214                    w: self.w,
1215                }
1216            }
1217
1218            fn xzxx(self) -> Vec4<T> {
1219                Vec4 {
1220                    x: self.x,
1221                    y: self.z,
1222                    z: self.x,
1223                    w: self.x,
1224                }
1225            }
1226
1227            fn xzxy(self) -> Vec4<T> {
1228                Vec4 {
1229                    x: self.x,
1230                    y: self.z,
1231                    z: self.x,
1232                    w: self.y,
1233                }
1234            }
1235
1236            fn xzxz(self) -> Vec4<T> {
1237                Vec4 {
1238                    x: self.x,
1239                    y: self.z,
1240                    z: self.x,
1241                    w: self.z,
1242                }
1243            }
1244
1245            fn xzxw(self) -> Vec4<T> {
1246                Vec4 {
1247                    x: self.x,
1248                    y: self.z,
1249                    z: self.x,
1250                    w: self.w,
1251                }
1252            }
1253
1254            fn xzyx(self) -> Vec4<T> {
1255                Vec4 {
1256                    x: self.x,
1257                    y: self.z,
1258                    z: self.y,
1259                    w: self.x,
1260                }
1261            }
1262
1263            fn xzyy(self) -> Vec4<T> {
1264                Vec4 {
1265                    x: self.x,
1266                    y: self.z,
1267                    z: self.y,
1268                    w: self.y,
1269                }
1270            }
1271
1272            fn xzyz(self) -> Vec4<T> {
1273                Vec4 {
1274                    x: self.x,
1275                    y: self.z,
1276                    z: self.y,
1277                    w: self.z,
1278                }
1279            }
1280
1281            fn xzyw(self) -> Vec4<T> {
1282                Vec4 {
1283                    x: self.x,
1284                    y: self.z,
1285                    z: self.y,
1286                    w: self.w,
1287                }
1288            }
1289
1290            fn xzzx(self) -> Vec4<T> {
1291                Vec4 {
1292                    x: self.x,
1293                    y: self.z,
1294                    z: self.z,
1295                    w: self.x,
1296                }
1297            }
1298
1299            fn xzzy(self) -> Vec4<T> {
1300                Vec4 {
1301                    x: self.x,
1302                    y: self.z,
1303                    z: self.z,
1304                    w: self.y,
1305                }
1306            }
1307
1308            fn xzzz(self) -> Vec4<T> {
1309                Vec4 {
1310                    x: self.x,
1311                    y: self.z,
1312                    z: self.z,
1313                    w: self.z,
1314                }
1315            }
1316
1317            fn xzzw(self) -> Vec4<T> {
1318                Vec4 {
1319                    x: self.x,
1320                    y: self.z,
1321                    z: self.z,
1322                    w: self.w,
1323                }
1324            }
1325
1326            fn xzwx(self) -> Vec4<T> {
1327                Vec4 {
1328                    x: self.x,
1329                    y: self.z,
1330                    z: self.w,
1331                    w: self.x,
1332                }
1333            }
1334
1335            fn xzwy(self) -> Vec4<T> {
1336                Vec4 {
1337                    x: self.x,
1338                    y: self.z,
1339                    z: self.w,
1340                    w: self.y,
1341                }
1342            }
1343
1344            fn xzwz(self) -> Vec4<T> {
1345                Vec4 {
1346                    x: self.x,
1347                    y: self.z,
1348                    z: self.w,
1349                    w: self.z,
1350                }
1351            }
1352
1353            fn xzww(self) -> Vec4<T> {
1354                Vec4 {
1355                    x: self.x,
1356                    y: self.z,
1357                    z: self.w,
1358                    w: self.w,
1359                }
1360            }
1361
1362            fn xwxx(self) -> Vec4<T> {
1363                Vec4 {
1364                    x: self.x,
1365                    y: self.w,
1366                    z: self.x,
1367                    w: self.x,
1368                }
1369            }
1370
1371            fn xwxy(self) -> Vec4<T> {
1372                Vec4 {
1373                    x: self.x,
1374                    y: self.w,
1375                    z: self.x,
1376                    w: self.y,
1377                }
1378            }
1379
1380            fn xwxz(self) -> Vec4<T> {
1381                Vec4 {
1382                    x: self.x,
1383                    y: self.w,
1384                    z: self.x,
1385                    w: self.z,
1386                }
1387            }
1388
1389            fn xwxw(self) -> Vec4<T> {
1390                Vec4 {
1391                    x: self.x,
1392                    y: self.w,
1393                    z: self.x,
1394                    w: self.w,
1395                }
1396            }
1397
1398            fn xwyx(self) -> Vec4<T> {
1399                Vec4 {
1400                    x: self.x,
1401                    y: self.w,
1402                    z: self.y,
1403                    w: self.x,
1404                }
1405            }
1406
1407            fn xwyy(self) -> Vec4<T> {
1408                Vec4 {
1409                    x: self.x,
1410                    y: self.w,
1411                    z: self.y,
1412                    w: self.y,
1413                }
1414            }
1415
1416            fn xwyz(self) -> Vec4<T> {
1417                Vec4 {
1418                    x: self.x,
1419                    y: self.w,
1420                    z: self.y,
1421                    w: self.z,
1422                }
1423            }
1424
1425            fn xwyw(self) -> Vec4<T> {
1426                Vec4 {
1427                    x: self.x,
1428                    y: self.w,
1429                    z: self.y,
1430                    w: self.w,
1431                }
1432            }
1433
1434            fn xwzx(self) -> Vec4<T> {
1435                Vec4 {
1436                    x: self.x,
1437                    y: self.w,
1438                    z: self.z,
1439                    w: self.x,
1440                }
1441            }
1442
1443            fn xwzy(self) -> Vec4<T> {
1444                Vec4 {
1445                    x: self.x,
1446                    y: self.w,
1447                    z: self.z,
1448                    w: self.y,
1449                }
1450            }
1451
1452            fn xwzz(self) -> Vec4<T> {
1453                Vec4 {
1454                    x: self.x,
1455                    y: self.w,
1456                    z: self.z,
1457                    w: self.z,
1458                }
1459            }
1460
1461            fn xwzw(self) -> Vec4<T> {
1462                Vec4 {
1463                    x: self.x,
1464                    y: self.w,
1465                    z: self.z,
1466                    w: self.w,
1467                }
1468            }
1469
1470            fn xwwx(self) -> Vec4<T> {
1471                Vec4 {
1472                    x: self.x,
1473                    y: self.w,
1474                    z: self.w,
1475                    w: self.x,
1476                }
1477            }
1478
1479            fn xwwy(self) -> Vec4<T> {
1480                Vec4 {
1481                    x: self.x,
1482                    y: self.w,
1483                    z: self.w,
1484                    w: self.y,
1485                }
1486            }
1487
1488            fn xwwz(self) -> Vec4<T> {
1489                Vec4 {
1490                    x: self.x,
1491                    y: self.w,
1492                    z: self.w,
1493                    w: self.z,
1494                }
1495            }
1496
1497            fn xwww(self) -> Vec4<T> {
1498                Vec4 {
1499                    x: self.x,
1500                    y: self.w,
1501                    z: self.w,
1502                    w: self.w,
1503                }
1504            }
1505
1506            fn yxxx(self) -> Vec4<T> {
1507                Vec4 {
1508                    x: self.y,
1509                    y: self.x,
1510                    z: self.x,
1511                    w: self.x,
1512                }
1513            }
1514
1515            fn yxxy(self) -> Vec4<T> {
1516                Vec4 {
1517                    x: self.y,
1518                    y: self.x,
1519                    z: self.x,
1520                    w: self.y,
1521                }
1522            }
1523
1524            fn yxxz(self) -> Vec4<T> {
1525                Vec4 {
1526                    x: self.y,
1527                    y: self.x,
1528                    z: self.x,
1529                    w: self.z,
1530                }
1531            }
1532
1533            fn yxxw(self) -> Vec4<T> {
1534                Vec4 {
1535                    x: self.y,
1536                    y: self.x,
1537                    z: self.x,
1538                    w: self.w,
1539                }
1540            }
1541
1542            fn yxyx(self) -> Vec4<T> {
1543                Vec4 {
1544                    x: self.y,
1545                    y: self.x,
1546                    z: self.y,
1547                    w: self.x,
1548                }
1549            }
1550
1551            fn yxyy(self) -> Vec4<T> {
1552                Vec4 {
1553                    x: self.y,
1554                    y: self.x,
1555                    z: self.y,
1556                    w: self.y,
1557                }
1558            }
1559
1560            fn yxyz(self) -> Vec4<T> {
1561                Vec4 {
1562                    x: self.y,
1563                    y: self.x,
1564                    z: self.y,
1565                    w: self.z,
1566                }
1567            }
1568
1569            fn yxyw(self) -> Vec4<T> {
1570                Vec4 {
1571                    x: self.y,
1572                    y: self.x,
1573                    z: self.y,
1574                    w: self.w,
1575                }
1576            }
1577
1578            fn yxzx(self) -> Vec4<T> {
1579                Vec4 {
1580                    x: self.y,
1581                    y: self.x,
1582                    z: self.z,
1583                    w: self.x,
1584                }
1585            }
1586
1587            fn yxzy(self) -> Vec4<T> {
1588                Vec4 {
1589                    x: self.y,
1590                    y: self.x,
1591                    z: self.z,
1592                    w: self.y,
1593                }
1594            }
1595
1596            fn yxzz(self) -> Vec4<T> {
1597                Vec4 {
1598                    x: self.y,
1599                    y: self.x,
1600                    z: self.z,
1601                    w: self.z,
1602                }
1603            }
1604
1605            fn yxzw(self) -> Vec4<T> {
1606                Vec4 {
1607                    x: self.y,
1608                    y: self.x,
1609                    z: self.z,
1610                    w: self.w,
1611                }
1612            }
1613
1614            fn yxwx(self) -> Vec4<T> {
1615                Vec4 {
1616                    x: self.y,
1617                    y: self.x,
1618                    z: self.w,
1619                    w: self.x,
1620                }
1621            }
1622
1623            fn yxwy(self) -> Vec4<T> {
1624                Vec4 {
1625                    x: self.y,
1626                    y: self.x,
1627                    z: self.w,
1628                    w: self.y,
1629                }
1630            }
1631
1632            fn yxwz(self) -> Vec4<T> {
1633                Vec4 {
1634                    x: self.y,
1635                    y: self.x,
1636                    z: self.w,
1637                    w: self.z,
1638                }
1639            }
1640
1641            fn yxww(self) -> Vec4<T> {
1642                Vec4 {
1643                    x: self.y,
1644                    y: self.x,
1645                    z: self.w,
1646                    w: self.w,
1647                }
1648            }
1649
1650            fn yyxx(self) -> Vec4<T> {
1651                Vec4 {
1652                    x: self.y,
1653                    y: self.y,
1654                    z: self.x,
1655                    w: self.x,
1656                }
1657            }
1658
1659            fn yyxy(self) -> Vec4<T> {
1660                Vec4 {
1661                    x: self.y,
1662                    y: self.y,
1663                    z: self.x,
1664                    w: self.y,
1665                }
1666            }
1667
1668            fn yyxz(self) -> Vec4<T> {
1669                Vec4 {
1670                    x: self.y,
1671                    y: self.y,
1672                    z: self.x,
1673                    w: self.z,
1674                }
1675            }
1676
1677            fn yyxw(self) -> Vec4<T> {
1678                Vec4 {
1679                    x: self.y,
1680                    y: self.y,
1681                    z: self.x,
1682                    w: self.w,
1683                }
1684            }
1685
1686            fn yyyx(self) -> Vec4<T> {
1687                Vec4 {
1688                    x: self.y,
1689                    y: self.y,
1690                    z: self.y,
1691                    w: self.x,
1692                }
1693            }
1694
1695            fn yyyy(self) -> Vec4<T> {
1696                Vec4 {
1697                    x: self.y,
1698                    y: self.y,
1699                    z: self.y,
1700                    w: self.y,
1701                }
1702            }
1703
1704            fn yyyz(self) -> Vec4<T> {
1705                Vec4 {
1706                    x: self.y,
1707                    y: self.y,
1708                    z: self.y,
1709                    w: self.z,
1710                }
1711            }
1712
1713            fn yyyw(self) -> Vec4<T> {
1714                Vec4 {
1715                    x: self.y,
1716                    y: self.y,
1717                    z: self.y,
1718                    w: self.w,
1719                }
1720            }
1721
1722            fn yyzx(self) -> Vec4<T> {
1723                Vec4 {
1724                    x: self.y,
1725                    y: self.y,
1726                    z: self.z,
1727                    w: self.x,
1728                }
1729            }
1730
1731            fn yyzy(self) -> Vec4<T> {
1732                Vec4 {
1733                    x: self.y,
1734                    y: self.y,
1735                    z: self.z,
1736                    w: self.y,
1737                }
1738            }
1739
1740            fn yyzz(self) -> Vec4<T> {
1741                Vec4 {
1742                    x: self.y,
1743                    y: self.y,
1744                    z: self.z,
1745                    w: self.z,
1746                }
1747            }
1748
1749            fn yyzw(self) -> Vec4<T> {
1750                Vec4 {
1751                    x: self.y,
1752                    y: self.y,
1753                    z: self.z,
1754                    w: self.w,
1755                }
1756            }
1757
1758            fn yywx(self) -> Vec4<T> {
1759                Vec4 {
1760                    x: self.y,
1761                    y: self.y,
1762                    z: self.w,
1763                    w: self.x,
1764                }
1765            }
1766
1767            fn yywy(self) -> Vec4<T> {
1768                Vec4 {
1769                    x: self.y,
1770                    y: self.y,
1771                    z: self.w,
1772                    w: self.y,
1773                }
1774            }
1775
1776            fn yywz(self) -> Vec4<T> {
1777                Vec4 {
1778                    x: self.y,
1779                    y: self.y,
1780                    z: self.w,
1781                    w: self.z,
1782                }
1783            }
1784
1785            fn yyww(self) -> Vec4<T> {
1786                Vec4 {
1787                    x: self.y,
1788                    y: self.y,
1789                    z: self.w,
1790                    w: self.w,
1791                }
1792            }
1793
1794            fn yzxx(self) -> Vec4<T> {
1795                Vec4 {
1796                    x: self.y,
1797                    y: self.z,
1798                    z: self.x,
1799                    w: self.x,
1800                }
1801            }
1802
1803            fn yzxy(self) -> Vec4<T> {
1804                Vec4 {
1805                    x: self.y,
1806                    y: self.z,
1807                    z: self.x,
1808                    w: self.y,
1809                }
1810            }
1811
1812            fn yzxz(self) -> Vec4<T> {
1813                Vec4 {
1814                    x: self.y,
1815                    y: self.z,
1816                    z: self.x,
1817                    w: self.z,
1818                }
1819            }
1820
1821            fn yzxw(self) -> Vec4<T> {
1822                Vec4 {
1823                    x: self.y,
1824                    y: self.z,
1825                    z: self.x,
1826                    w: self.w,
1827                }
1828            }
1829
1830            fn yzyx(self) -> Vec4<T> {
1831                Vec4 {
1832                    x: self.y,
1833                    y: self.z,
1834                    z: self.y,
1835                    w: self.x,
1836                }
1837            }
1838
1839            fn yzyy(self) -> Vec4<T> {
1840                Vec4 {
1841                    x: self.y,
1842                    y: self.z,
1843                    z: self.y,
1844                    w: self.y,
1845                }
1846            }
1847
1848            fn yzyz(self) -> Vec4<T> {
1849                Vec4 {
1850                    x: self.y,
1851                    y: self.z,
1852                    z: self.y,
1853                    w: self.z,
1854                }
1855            }
1856
1857            fn yzyw(self) -> Vec4<T> {
1858                Vec4 {
1859                    x: self.y,
1860                    y: self.z,
1861                    z: self.y,
1862                    w: self.w,
1863                }
1864            }
1865
1866            fn yzzx(self) -> Vec4<T> {
1867                Vec4 {
1868                    x: self.y,
1869                    y: self.z,
1870                    z: self.z,
1871                    w: self.x,
1872                }
1873            }
1874
1875            fn yzzy(self) -> Vec4<T> {
1876                Vec4 {
1877                    x: self.y,
1878                    y: self.z,
1879                    z: self.z,
1880                    w: self.y,
1881                }
1882            }
1883
1884            fn yzzz(self) -> Vec4<T> {
1885                Vec4 {
1886                    x: self.y,
1887                    y: self.z,
1888                    z: self.z,
1889                    w: self.z,
1890                }
1891            }
1892
1893            fn yzzw(self) -> Vec4<T> {
1894                Vec4 {
1895                    x: self.y,
1896                    y: self.z,
1897                    z: self.z,
1898                    w: self.w,
1899                }
1900            }
1901
1902            fn yzwx(self) -> Vec4<T> {
1903                Vec4 {
1904                    x: self.y,
1905                    y: self.z,
1906                    z: self.w,
1907                    w: self.x,
1908                }
1909            }
1910
1911            fn yzwy(self) -> Vec4<T> {
1912                Vec4 {
1913                    x: self.y,
1914                    y: self.z,
1915                    z: self.w,
1916                    w: self.y,
1917                }
1918            }
1919
1920            fn yzwz(self) -> Vec4<T> {
1921                Vec4 {
1922                    x: self.y,
1923                    y: self.z,
1924                    z: self.w,
1925                    w: self.z,
1926                }
1927            }
1928
1929            fn yzww(self) -> Vec4<T> {
1930                Vec4 {
1931                    x: self.y,
1932                    y: self.z,
1933                    z: self.w,
1934                    w: self.w,
1935                }
1936            }
1937
1938            fn ywxx(self) -> Vec4<T> {
1939                Vec4 {
1940                    x: self.y,
1941                    y: self.w,
1942                    z: self.x,
1943                    w: self.x,
1944                }
1945            }
1946
1947            fn ywxy(self) -> Vec4<T> {
1948                Vec4 {
1949                    x: self.y,
1950                    y: self.w,
1951                    z: self.x,
1952                    w: self.y,
1953                }
1954            }
1955
1956            fn ywxz(self) -> Vec4<T> {
1957                Vec4 {
1958                    x: self.y,
1959                    y: self.w,
1960                    z: self.x,
1961                    w: self.z,
1962                }
1963            }
1964
1965            fn ywxw(self) -> Vec4<T> {
1966                Vec4 {
1967                    x: self.y,
1968                    y: self.w,
1969                    z: self.x,
1970                    w: self.w,
1971                }
1972            }
1973
1974            fn ywyx(self) -> Vec4<T> {
1975                Vec4 {
1976                    x: self.y,
1977                    y: self.w,
1978                    z: self.y,
1979                    w: self.x,
1980                }
1981            }
1982
1983            fn ywyy(self) -> Vec4<T> {
1984                Vec4 {
1985                    x: self.y,
1986                    y: self.w,
1987                    z: self.y,
1988                    w: self.y,
1989                }
1990            }
1991
1992            fn ywyz(self) -> Vec4<T> {
1993                Vec4 {
1994                    x: self.y,
1995                    y: self.w,
1996                    z: self.y,
1997                    w: self.z,
1998                }
1999            }
2000
2001            fn ywyw(self) -> Vec4<T> {
2002                Vec4 {
2003                    x: self.y,
2004                    y: self.w,
2005                    z: self.y,
2006                    w: self.w,
2007                }
2008            }
2009
2010            fn ywzx(self) -> Vec4<T> {
2011                Vec4 {
2012                    x: self.y,
2013                    y: self.w,
2014                    z: self.z,
2015                    w: self.x,
2016                }
2017            }
2018
2019            fn ywzy(self) -> Vec4<T> {
2020                Vec4 {
2021                    x: self.y,
2022                    y: self.w,
2023                    z: self.z,
2024                    w: self.y,
2025                }
2026            }
2027
2028            fn ywzz(self) -> Vec4<T> {
2029                Vec4 {
2030                    x: self.y,
2031                    y: self.w,
2032                    z: self.z,
2033                    w: self.z,
2034                }
2035            }
2036
2037            fn ywzw(self) -> Vec4<T> {
2038                Vec4 {
2039                    x: self.y,
2040                    y: self.w,
2041                    z: self.z,
2042                    w: self.w,
2043                }
2044            }
2045
2046            fn ywwx(self) -> Vec4<T> {
2047                Vec4 {
2048                    x: self.y,
2049                    y: self.w,
2050                    z: self.w,
2051                    w: self.x,
2052                }
2053            }
2054
2055            fn ywwy(self) -> Vec4<T> {
2056                Vec4 {
2057                    x: self.y,
2058                    y: self.w,
2059                    z: self.w,
2060                    w: self.y,
2061                }
2062            }
2063
2064            fn ywwz(self) -> Vec4<T> {
2065                Vec4 {
2066                    x: self.y,
2067                    y: self.w,
2068                    z: self.w,
2069                    w: self.z,
2070                }
2071            }
2072
2073            fn ywww(self) -> Vec4<T> {
2074                Vec4 {
2075                    x: self.y,
2076                    y: self.w,
2077                    z: self.w,
2078                    w: self.w,
2079                }
2080            }
2081
2082            fn zxxx(self) -> Vec4<T> {
2083                Vec4 {
2084                    x: self.z,
2085                    y: self.x,
2086                    z: self.x,
2087                    w: self.x,
2088                }
2089            }
2090
2091            fn zxxy(self) -> Vec4<T> {
2092                Vec4 {
2093                    x: self.z,
2094                    y: self.x,
2095                    z: self.x,
2096                    w: self.y,
2097                }
2098            }
2099
2100            fn zxxz(self) -> Vec4<T> {
2101                Vec4 {
2102                    x: self.z,
2103                    y: self.x,
2104                    z: self.x,
2105                    w: self.z,
2106                }
2107            }
2108
2109            fn zxxw(self) -> Vec4<T> {
2110                Vec4 {
2111                    x: self.z,
2112                    y: self.x,
2113                    z: self.x,
2114                    w: self.w,
2115                }
2116            }
2117
2118            fn zxyx(self) -> Vec4<T> {
2119                Vec4 {
2120                    x: self.z,
2121                    y: self.x,
2122                    z: self.y,
2123                    w: self.x,
2124                }
2125            }
2126
2127            fn zxyy(self) -> Vec4<T> {
2128                Vec4 {
2129                    x: self.z,
2130                    y: self.x,
2131                    z: self.y,
2132                    w: self.y,
2133                }
2134            }
2135
2136            fn zxyz(self) -> Vec4<T> {
2137                Vec4 {
2138                    x: self.z,
2139                    y: self.x,
2140                    z: self.y,
2141                    w: self.z,
2142                }
2143            }
2144
2145            fn zxyw(self) -> Vec4<T> {
2146                Vec4 {
2147                    x: self.z,
2148                    y: self.x,
2149                    z: self.y,
2150                    w: self.w,
2151                }
2152            }
2153
2154            fn zxzx(self) -> Vec4<T> {
2155                Vec4 {
2156                    x: self.z,
2157                    y: self.x,
2158                    z: self.z,
2159                    w: self.x,
2160                }
2161            }
2162
2163            fn zxzy(self) -> Vec4<T> {
2164                Vec4 {
2165                    x: self.z,
2166                    y: self.x,
2167                    z: self.z,
2168                    w: self.y,
2169                }
2170            }
2171
2172            fn zxzz(self) -> Vec4<T> {
2173                Vec4 {
2174                    x: self.z,
2175                    y: self.x,
2176                    z: self.z,
2177                    w: self.z,
2178                }
2179            }
2180
2181            fn zxzw(self) -> Vec4<T> {
2182                Vec4 {
2183                    x: self.z,
2184                    y: self.x,
2185                    z: self.z,
2186                    w: self.w,
2187                }
2188            }
2189
2190            fn zxwx(self) -> Vec4<T> {
2191                Vec4 {
2192                    x: self.z,
2193                    y: self.x,
2194                    z: self.w,
2195                    w: self.x,
2196                }
2197            }
2198
2199            fn zxwy(self) -> Vec4<T> {
2200                Vec4 {
2201                    x: self.z,
2202                    y: self.x,
2203                    z: self.w,
2204                    w: self.y,
2205                }
2206            }
2207
2208            fn zxwz(self) -> Vec4<T> {
2209                Vec4 {
2210                    x: self.z,
2211                    y: self.x,
2212                    z: self.w,
2213                    w: self.z,
2214                }
2215            }
2216
2217            fn zxww(self) -> Vec4<T> {
2218                Vec4 {
2219                    x: self.z,
2220                    y: self.x,
2221                    z: self.w,
2222                    w: self.w,
2223                }
2224            }
2225
2226            fn zyxx(self) -> Vec4<T> {
2227                Vec4 {
2228                    x: self.z,
2229                    y: self.y,
2230                    z: self.x,
2231                    w: self.x,
2232                }
2233            }
2234
2235            fn zyxy(self) -> Vec4<T> {
2236                Vec4 {
2237                    x: self.z,
2238                    y: self.y,
2239                    z: self.x,
2240                    w: self.y,
2241                }
2242            }
2243
2244            fn zyxz(self) -> Vec4<T> {
2245                Vec4 {
2246                    x: self.z,
2247                    y: self.y,
2248                    z: self.x,
2249                    w: self.z,
2250                }
2251            }
2252
2253            fn zyxw(self) -> Vec4<T> {
2254                Vec4 {
2255                    x: self.z,
2256                    y: self.y,
2257                    z: self.x,
2258                    w: self.w,
2259                }
2260            }
2261
2262            fn zyyx(self) -> Vec4<T> {
2263                Vec4 {
2264                    x: self.z,
2265                    y: self.y,
2266                    z: self.y,
2267                    w: self.x,
2268                }
2269            }
2270
2271            fn zyyy(self) -> Vec4<T> {
2272                Vec4 {
2273                    x: self.z,
2274                    y: self.y,
2275                    z: self.y,
2276                    w: self.y,
2277                }
2278            }
2279
2280            fn zyyz(self) -> Vec4<T> {
2281                Vec4 {
2282                    x: self.z,
2283                    y: self.y,
2284                    z: self.y,
2285                    w: self.z,
2286                }
2287            }
2288
2289            fn zyyw(self) -> Vec4<T> {
2290                Vec4 {
2291                    x: self.z,
2292                    y: self.y,
2293                    z: self.y,
2294                    w: self.w,
2295                }
2296            }
2297
2298            fn zyzx(self) -> Vec4<T> {
2299                Vec4 {
2300                    x: self.z,
2301                    y: self.y,
2302                    z: self.z,
2303                    w: self.x,
2304                }
2305            }
2306
2307            fn zyzy(self) -> Vec4<T> {
2308                Vec4 {
2309                    x: self.z,
2310                    y: self.y,
2311                    z: self.z,
2312                    w: self.y,
2313                }
2314            }
2315
2316            fn zyzz(self) -> Vec4<T> {
2317                Vec4 {
2318                    x: self.z,
2319                    y: self.y,
2320                    z: self.z,
2321                    w: self.z,
2322                }
2323            }
2324
2325            fn zyzw(self) -> Vec4<T> {
2326                Vec4 {
2327                    x: self.z,
2328                    y: self.y,
2329                    z: self.z,
2330                    w: self.w,
2331                }
2332            }
2333
2334            fn zywx(self) -> Vec4<T> {
2335                Vec4 {
2336                    x: self.z,
2337                    y: self.y,
2338                    z: self.w,
2339                    w: self.x,
2340                }
2341            }
2342
2343            fn zywy(self) -> Vec4<T> {
2344                Vec4 {
2345                    x: self.z,
2346                    y: self.y,
2347                    z: self.w,
2348                    w: self.y,
2349                }
2350            }
2351
2352            fn zywz(self) -> Vec4<T> {
2353                Vec4 {
2354                    x: self.z,
2355                    y: self.y,
2356                    z: self.w,
2357                    w: self.z,
2358                }
2359            }
2360
2361            fn zyww(self) -> Vec4<T> {
2362                Vec4 {
2363                    x: self.z,
2364                    y: self.y,
2365                    z: self.w,
2366                    w: self.w,
2367                }
2368            }
2369
2370            fn zzxx(self) -> Vec4<T> {
2371                Vec4 {
2372                    x: self.z,
2373                    y: self.z,
2374                    z: self.x,
2375                    w: self.x,
2376                }
2377            }
2378
2379            fn zzxy(self) -> Vec4<T> {
2380                Vec4 {
2381                    x: self.z,
2382                    y: self.z,
2383                    z: self.x,
2384                    w: self.y,
2385                }
2386            }
2387
2388            fn zzxz(self) -> Vec4<T> {
2389                Vec4 {
2390                    x: self.z,
2391                    y: self.z,
2392                    z: self.x,
2393                    w: self.z,
2394                }
2395            }
2396
2397            fn zzxw(self) -> Vec4<T> {
2398                Vec4 {
2399                    x: self.z,
2400                    y: self.z,
2401                    z: self.x,
2402                    w: self.w,
2403                }
2404            }
2405
2406            fn zzyx(self) -> Vec4<T> {
2407                Vec4 {
2408                    x: self.z,
2409                    y: self.z,
2410                    z: self.y,
2411                    w: self.x,
2412                }
2413            }
2414
2415            fn zzyy(self) -> Vec4<T> {
2416                Vec4 {
2417                    x: self.z,
2418                    y: self.z,
2419                    z: self.y,
2420                    w: self.y,
2421                }
2422            }
2423
2424            fn zzyz(self) -> Vec4<T> {
2425                Vec4 {
2426                    x: self.z,
2427                    y: self.z,
2428                    z: self.y,
2429                    w: self.z,
2430                }
2431            }
2432
2433            fn zzyw(self) -> Vec4<T> {
2434                Vec4 {
2435                    x: self.z,
2436                    y: self.z,
2437                    z: self.y,
2438                    w: self.w,
2439                }
2440            }
2441
2442            fn zzzx(self) -> Vec4<T> {
2443                Vec4 {
2444                    x: self.z,
2445                    y: self.z,
2446                    z: self.z,
2447                    w: self.x,
2448                }
2449            }
2450
2451            fn zzzy(self) -> Vec4<T> {
2452                Vec4 {
2453                    x: self.z,
2454                    y: self.z,
2455                    z: self.z,
2456                    w: self.y,
2457                }
2458            }
2459
2460            fn zzzz(self) -> Vec4<T> {
2461                Vec4 {
2462                    x: self.z,
2463                    y: self.z,
2464                    z: self.z,
2465                    w: self.z,
2466                }
2467            }
2468
2469            fn zzzw(self) -> Vec4<T> {
2470                Vec4 {
2471                    x: self.z,
2472                    y: self.z,
2473                    z: self.z,
2474                    w: self.w,
2475                }
2476            }
2477
2478            fn zzwx(self) -> Vec4<T> {
2479                Vec4 {
2480                    x: self.z,
2481                    y: self.z,
2482                    z: self.w,
2483                    w: self.x,
2484                }
2485            }
2486
2487            fn zzwy(self) -> Vec4<T> {
2488                Vec4 {
2489                    x: self.z,
2490                    y: self.z,
2491                    z: self.w,
2492                    w: self.y,
2493                }
2494            }
2495
2496            fn zzwz(self) -> Vec4<T> {
2497                Vec4 {
2498                    x: self.z,
2499                    y: self.z,
2500                    z: self.w,
2501                    w: self.z,
2502                }
2503            }
2504
2505            fn zzww(self) -> Vec4<T> {
2506                Vec4 {
2507                    x: self.z,
2508                    y: self.z,
2509                    z: self.w,
2510                    w: self.w,
2511                }
2512            }
2513
2514            fn zwxx(self) -> Vec4<T> {
2515                Vec4 {
2516                    x: self.z,
2517                    y: self.w,
2518                    z: self.x,
2519                    w: self.x,
2520                }
2521            }
2522
2523            fn zwxy(self) -> Vec4<T> {
2524                Vec4 {
2525                    x: self.z,
2526                    y: self.w,
2527                    z: self.x,
2528                    w: self.y,
2529                }
2530            }
2531
2532            fn zwxz(self) -> Vec4<T> {
2533                Vec4 {
2534                    x: self.z,
2535                    y: self.w,
2536                    z: self.x,
2537                    w: self.z,
2538                }
2539            }
2540
2541            fn zwxw(self) -> Vec4<T> {
2542                Vec4 {
2543                    x: self.z,
2544                    y: self.w,
2545                    z: self.x,
2546                    w: self.w,
2547                }
2548            }
2549
2550            fn zwyx(self) -> Vec4<T> {
2551                Vec4 {
2552                    x: self.z,
2553                    y: self.w,
2554                    z: self.y,
2555                    w: self.x,
2556                }
2557            }
2558
2559            fn zwyy(self) -> Vec4<T> {
2560                Vec4 {
2561                    x: self.z,
2562                    y: self.w,
2563                    z: self.y,
2564                    w: self.y,
2565                }
2566            }
2567
2568            fn zwyz(self) -> Vec4<T> {
2569                Vec4 {
2570                    x: self.z,
2571                    y: self.w,
2572                    z: self.y,
2573                    w: self.z,
2574                }
2575            }
2576
2577            fn zwyw(self) -> Vec4<T> {
2578                Vec4 {
2579                    x: self.z,
2580                    y: self.w,
2581                    z: self.y,
2582                    w: self.w,
2583                }
2584            }
2585
2586            fn zwzx(self) -> Vec4<T> {
2587                Vec4 {
2588                    x: self.z,
2589                    y: self.w,
2590                    z: self.z,
2591                    w: self.x,
2592                }
2593            }
2594
2595            fn zwzy(self) -> Vec4<T> {
2596                Vec4 {
2597                    x: self.z,
2598                    y: self.w,
2599                    z: self.z,
2600                    w: self.y,
2601                }
2602            }
2603
2604            fn zwzz(self) -> Vec4<T> {
2605                Vec4 {
2606                    x: self.z,
2607                    y: self.w,
2608                    z: self.z,
2609                    w: self.z,
2610                }
2611            }
2612
2613            fn zwzw(self) -> Vec4<T> {
2614                Vec4 {
2615                    x: self.z,
2616                    y: self.w,
2617                    z: self.z,
2618                    w: self.w,
2619                }
2620            }
2621
2622            fn zwwx(self) -> Vec4<T> {
2623                Vec4 {
2624                    x: self.z,
2625                    y: self.w,
2626                    z: self.w,
2627                    w: self.x,
2628                }
2629            }
2630
2631            fn zwwy(self) -> Vec4<T> {
2632                Vec4 {
2633                    x: self.z,
2634                    y: self.w,
2635                    z: self.w,
2636                    w: self.y,
2637                }
2638            }
2639
2640            fn zwwz(self) -> Vec4<T> {
2641                Vec4 {
2642                    x: self.z,
2643                    y: self.w,
2644                    z: self.w,
2645                    w: self.z,
2646                }
2647            }
2648
2649            fn zwww(self) -> Vec4<T> {
2650                Vec4 {
2651                    x: self.z,
2652                    y: self.w,
2653                    z: self.w,
2654                    w: self.w,
2655                }
2656            }
2657
2658            fn wxxx(self) -> Vec4<T> {
2659                Vec4 {
2660                    x: self.w,
2661                    y: self.x,
2662                    z: self.x,
2663                    w: self.x,
2664                }
2665            }
2666
2667            fn wxxy(self) -> Vec4<T> {
2668                Vec4 {
2669                    x: self.w,
2670                    y: self.x,
2671                    z: self.x,
2672                    w: self.y,
2673                }
2674            }
2675
2676            fn wxxz(self) -> Vec4<T> {
2677                Vec4 {
2678                    x: self.w,
2679                    y: self.x,
2680                    z: self.x,
2681                    w: self.z,
2682                }
2683            }
2684
2685            fn wxxw(self) -> Vec4<T> {
2686                Vec4 {
2687                    x: self.w,
2688                    y: self.x,
2689                    z: self.x,
2690                    w: self.w,
2691                }
2692            }
2693
2694            fn wxyx(self) -> Vec4<T> {
2695                Vec4 {
2696                    x: self.w,
2697                    y: self.x,
2698                    z: self.y,
2699                    w: self.x,
2700                }
2701            }
2702
2703            fn wxyy(self) -> Vec4<T> {
2704                Vec4 {
2705                    x: self.w,
2706                    y: self.x,
2707                    z: self.y,
2708                    w: self.y,
2709                }
2710            }
2711
2712            fn wxyz(self) -> Vec4<T> {
2713                Vec4 {
2714                    x: self.w,
2715                    y: self.x,
2716                    z: self.y,
2717                    w: self.z,
2718                }
2719            }
2720
2721            fn wxyw(self) -> Vec4<T> {
2722                Vec4 {
2723                    x: self.w,
2724                    y: self.x,
2725                    z: self.y,
2726                    w: self.w,
2727                }
2728            }
2729
2730            fn wxzx(self) -> Vec4<T> {
2731                Vec4 {
2732                    x: self.w,
2733                    y: self.x,
2734                    z: self.z,
2735                    w: self.x,
2736                }
2737            }
2738
2739            fn wxzy(self) -> Vec4<T> {
2740                Vec4 {
2741                    x: self.w,
2742                    y: self.x,
2743                    z: self.z,
2744                    w: self.y,
2745                }
2746            }
2747
2748            fn wxzz(self) -> Vec4<T> {
2749                Vec4 {
2750                    x: self.w,
2751                    y: self.x,
2752                    z: self.z,
2753                    w: self.z,
2754                }
2755            }
2756
2757            fn wxzw(self) -> Vec4<T> {
2758                Vec4 {
2759                    x: self.w,
2760                    y: self.x,
2761                    z: self.z,
2762                    w: self.w,
2763                }
2764            }
2765
2766            fn wxwx(self) -> Vec4<T> {
2767                Vec4 {
2768                    x: self.w,
2769                    y: self.x,
2770                    z: self.w,
2771                    w: self.x,
2772                }
2773            }
2774
2775            fn wxwy(self) -> Vec4<T> {
2776                Vec4 {
2777                    x: self.w,
2778                    y: self.x,
2779                    z: self.w,
2780                    w: self.y,
2781                }
2782            }
2783
2784            fn wxwz(self) -> Vec4<T> {
2785                Vec4 {
2786                    x: self.w,
2787                    y: self.x,
2788                    z: self.w,
2789                    w: self.z,
2790                }
2791            }
2792
2793            fn wxww(self) -> Vec4<T> {
2794                Vec4 {
2795                    x: self.w,
2796                    y: self.x,
2797                    z: self.w,
2798                    w: self.w,
2799                }
2800            }
2801
2802            fn wyxx(self) -> Vec4<T> {
2803                Vec4 {
2804                    x: self.w,
2805                    y: self.y,
2806                    z: self.x,
2807                    w: self.x,
2808                }
2809            }
2810
2811            fn wyxy(self) -> Vec4<T> {
2812                Vec4 {
2813                    x: self.w,
2814                    y: self.y,
2815                    z: self.x,
2816                    w: self.y,
2817                }
2818            }
2819
2820            fn wyxz(self) -> Vec4<T> {
2821                Vec4 {
2822                    x: self.w,
2823                    y: self.y,
2824                    z: self.x,
2825                    w: self.z,
2826                }
2827            }
2828
2829            fn wyxw(self) -> Vec4<T> {
2830                Vec4 {
2831                    x: self.w,
2832                    y: self.y,
2833                    z: self.x,
2834                    w: self.w,
2835                }
2836            }
2837
2838            fn wyyx(self) -> Vec4<T> {
2839                Vec4 {
2840                    x: self.w,
2841                    y: self.y,
2842                    z: self.y,
2843                    w: self.x,
2844                }
2845            }
2846
2847            fn wyyy(self) -> Vec4<T> {
2848                Vec4 {
2849                    x: self.w,
2850                    y: self.y,
2851                    z: self.y,
2852                    w: self.y,
2853                }
2854            }
2855
2856            fn wyyz(self) -> Vec4<T> {
2857                Vec4 {
2858                    x: self.w,
2859                    y: self.y,
2860                    z: self.y,
2861                    w: self.z,
2862                }
2863            }
2864
2865            fn wyyw(self) -> Vec4<T> {
2866                Vec4 {
2867                    x: self.w,
2868                    y: self.y,
2869                    z: self.y,
2870                    w: self.w,
2871                }
2872            }
2873
2874            fn wyzx(self) -> Vec4<T> {
2875                Vec4 {
2876                    x: self.w,
2877                    y: self.y,
2878                    z: self.z,
2879                    w: self.x,
2880                }
2881            }
2882
2883            fn wyzy(self) -> Vec4<T> {
2884                Vec4 {
2885                    x: self.w,
2886                    y: self.y,
2887                    z: self.z,
2888                    w: self.y,
2889                }
2890            }
2891
2892            fn wyzz(self) -> Vec4<T> {
2893                Vec4 {
2894                    x: self.w,
2895                    y: self.y,
2896                    z: self.z,
2897                    w: self.z,
2898                }
2899            }
2900
2901            fn wyzw(self) -> Vec4<T> {
2902                Vec4 {
2903                    x: self.w,
2904                    y: self.y,
2905                    z: self.z,
2906                    w: self.w,
2907                }
2908            }
2909
2910            fn wywx(self) -> Vec4<T> {
2911                Vec4 {
2912                    x: self.w,
2913                    y: self.y,
2914                    z: self.w,
2915                    w: self.x,
2916                }
2917            }
2918
2919            fn wywy(self) -> Vec4<T> {
2920                Vec4 {
2921                    x: self.w,
2922                    y: self.y,
2923                    z: self.w,
2924                    w: self.y,
2925                }
2926            }
2927
2928            fn wywz(self) -> Vec4<T> {
2929                Vec4 {
2930                    x: self.w,
2931                    y: self.y,
2932                    z: self.w,
2933                    w: self.z,
2934                }
2935            }
2936
2937            fn wyww(self) -> Vec4<T> {
2938                Vec4 {
2939                    x: self.w,
2940                    y: self.y,
2941                    z: self.w,
2942                    w: self.w,
2943                }
2944            }
2945
2946            fn wzxx(self) -> Vec4<T> {
2947                Vec4 {
2948                    x: self.w,
2949                    y: self.z,
2950                    z: self.x,
2951                    w: self.x,
2952                }
2953            }
2954
2955            fn wzxy(self) -> Vec4<T> {
2956                Vec4 {
2957                    x: self.w,
2958                    y: self.z,
2959                    z: self.x,
2960                    w: self.y,
2961                }
2962            }
2963
2964            fn wzxz(self) -> Vec4<T> {
2965                Vec4 {
2966                    x: self.w,
2967                    y: self.z,
2968                    z: self.x,
2969                    w: self.z,
2970                }
2971            }
2972
2973            fn wzxw(self) -> Vec4<T> {
2974                Vec4 {
2975                    x: self.w,
2976                    y: self.z,
2977                    z: self.x,
2978                    w: self.w,
2979                }
2980            }
2981
2982            fn wzyx(self) -> Vec4<T> {
2983                Vec4 {
2984                    x: self.w,
2985                    y: self.z,
2986                    z: self.y,
2987                    w: self.x,
2988                }
2989            }
2990
2991            fn wzyy(self) -> Vec4<T> {
2992                Vec4 {
2993                    x: self.w,
2994                    y: self.z,
2995                    z: self.y,
2996                    w: self.y,
2997                }
2998            }
2999
3000            fn wzyz(self) -> Vec4<T> {
3001                Vec4 {
3002                    x: self.w,
3003                    y: self.z,
3004                    z: self.y,
3005                    w: self.z,
3006                }
3007            }
3008
3009            fn wzyw(self) -> Vec4<T> {
3010                Vec4 {
3011                    x: self.w,
3012                    y: self.z,
3013                    z: self.y,
3014                    w: self.w,
3015                }
3016            }
3017
3018            fn wzzx(self) -> Vec4<T> {
3019                Vec4 {
3020                    x: self.w,
3021                    y: self.z,
3022                    z: self.z,
3023                    w: self.x,
3024                }
3025            }
3026
3027            fn wzzy(self) -> Vec4<T> {
3028                Vec4 {
3029                    x: self.w,
3030                    y: self.z,
3031                    z: self.z,
3032                    w: self.y,
3033                }
3034            }
3035
3036            fn wzzz(self) -> Vec4<T> {
3037                Vec4 {
3038                    x: self.w,
3039                    y: self.z,
3040                    z: self.z,
3041                    w: self.z,
3042                }
3043            }
3044
3045            fn wzzw(self) -> Vec4<T> {
3046                Vec4 {
3047                    x: self.w,
3048                    y: self.z,
3049                    z: self.z,
3050                    w: self.w,
3051                }
3052            }
3053
3054            fn wzwx(self) -> Vec4<T> {
3055                Vec4 {
3056                    x: self.w,
3057                    y: self.z,
3058                    z: self.w,
3059                    w: self.x,
3060                }
3061            }
3062
3063            fn wzwy(self) -> Vec4<T> {
3064                Vec4 {
3065                    x: self.w,
3066                    y: self.z,
3067                    z: self.w,
3068                    w: self.y,
3069                }
3070            }
3071
3072            fn wzwz(self) -> Vec4<T> {
3073                Vec4 {
3074                    x: self.w,
3075                    y: self.z,
3076                    z: self.w,
3077                    w: self.z,
3078                }
3079            }
3080
3081            fn wzww(self) -> Vec4<T> {
3082                Vec4 {
3083                    x: self.w,
3084                    y: self.z,
3085                    z: self.w,
3086                    w: self.w,
3087                }
3088            }
3089
3090            fn wwxx(self) -> Vec4<T> {
3091                Vec4 {
3092                    x: self.w,
3093                    y: self.w,
3094                    z: self.x,
3095                    w: self.x,
3096                }
3097            }
3098
3099            fn wwxy(self) -> Vec4<T> {
3100                Vec4 {
3101                    x: self.w,
3102                    y: self.w,
3103                    z: self.x,
3104                    w: self.y,
3105                }
3106            }
3107
3108            fn wwxz(self) -> Vec4<T> {
3109                Vec4 {
3110                    x: self.w,
3111                    y: self.w,
3112                    z: self.x,
3113                    w: self.z,
3114                }
3115            }
3116
3117            fn wwxw(self) -> Vec4<T> {
3118                Vec4 {
3119                    x: self.w,
3120                    y: self.w,
3121                    z: self.x,
3122                    w: self.w,
3123                }
3124            }
3125
3126            fn wwyx(self) -> Vec4<T> {
3127                Vec4 {
3128                    x: self.w,
3129                    y: self.w,
3130                    z: self.y,
3131                    w: self.x,
3132                }
3133            }
3134
3135            fn wwyy(self) -> Vec4<T> {
3136                Vec4 {
3137                    x: self.w,
3138                    y: self.w,
3139                    z: self.y,
3140                    w: self.y,
3141                }
3142            }
3143
3144            fn wwyz(self) -> Vec4<T> {
3145                Vec4 {
3146                    x: self.w,
3147                    y: self.w,
3148                    z: self.y,
3149                    w: self.z,
3150                }
3151            }
3152
3153            fn wwyw(self) -> Vec4<T> {
3154                Vec4 {
3155                    x: self.w,
3156                    y: self.w,
3157                    z: self.y,
3158                    w: self.w,
3159                }
3160            }
3161
3162            fn wwzx(self) -> Vec4<T> {
3163                Vec4 {
3164                    x: self.w,
3165                    y: self.w,
3166                    z: self.z,
3167                    w: self.x,
3168                }
3169            }
3170
3171            fn wwzy(self) -> Vec4<T> {
3172                Vec4 {
3173                    x: self.w,
3174                    y: self.w,
3175                    z: self.z,
3176                    w: self.y,
3177                }
3178            }
3179
3180            fn wwzz(self) -> Vec4<T> {
3181                Vec4 {
3182                    x: self.w,
3183                    y: self.w,
3184                    z: self.z,
3185                    w: self.z,
3186                }
3187            }
3188
3189            fn wwzw(self) -> Vec4<T> {
3190                Vec4 {
3191                    x: self.w,
3192                    y: self.w,
3193                    z: self.z,
3194                    w: self.w,
3195                }
3196            }
3197
3198            fn wwwx(self) -> Vec4<T> {
3199                Vec4 {
3200                    x: self.w,
3201                    y: self.w,
3202                    z: self.w,
3203                    w: self.x,
3204                }
3205            }
3206
3207            fn wwwy(self) -> Vec4<T> {
3208                Vec4 {
3209                    x: self.w,
3210                    y: self.w,
3211                    z: self.w,
3212                    w: self.y,
3213                }
3214            }
3215
3216            fn wwwz(self) -> Vec4<T> {
3217                Vec4 {
3218                    x: self.w,
3219                    y: self.w,
3220                    z: self.w,
3221                    w: self.z,
3222                }
3223            }
3224
3225            fn wwww(self) -> Vec4<T> {
3226                Vec4 {
3227                    x: self.w,
3228                    y: self.w,
3229                    z: self.w,
3230                    w: self.w,
3231                }
3232            }
3233
3234            fn set_xw(&mut self, other: Vec2<T>) {
3235                self.x = other.x; self.w = other.y;
3236            }
3237
3238            fn set_yw(&mut self, other: Vec2<T>) {
3239                self.y = other.x; self.w = other.y;
3240            }
3241
3242            fn set_zw(&mut self, other: Vec2<T>) {
3243                self.z = other.x; self.w = other.y;
3244            }
3245
3246            fn set_wx(&mut self, other: Vec2<T>) {
3247                self.w = other.x; self.x = other.y;
3248            }
3249
3250            fn set_wy(&mut self, other: Vec2<T>) {
3251                self.w = other.x; self.y = other.y;
3252            }
3253
3254            fn set_wz(&mut self, other: Vec2<T>) {
3255                self.w = other.x; self.z = other.y;
3256            }
3257
3258
3259            // output v4-v3
3260            fn set_xyw(&mut self, other: Vec3<T>) {
3261                self.x = other.x; self.y = other.y; self.w = other.z;
3262            }
3263
3264            fn set_xzw(&mut self, other: Vec3<T>) {
3265                self.x = other.x; self.z = other.y; self.w = other.z;
3266            }
3267
3268            fn set_xwy(&mut self, other: Vec3<T>) {
3269                self.x = other.x; self.w = other.y; self.y = other.z;
3270            }
3271
3272            fn set_xwz(&mut self, other: Vec3<T>) {
3273                self.x = other.x; self.w = other.y; self.z = other.z;
3274            }
3275
3276            fn set_yxw(&mut self, other: Vec3<T>) {
3277                self.y = other.x; self.x = other.y; self.w = other.z;
3278            }
3279
3280            fn set_yzw(&mut self, other: Vec3<T>) {
3281                self.y = other.x; self.z = other.y; self.w = other.z;
3282            }
3283
3284            fn set_ywx(&mut self, other: Vec3<T>) {
3285                self.y = other.x; self.w = other.y; self.x = other.z;
3286            }
3287
3288            fn set_ywz(&mut self, other: Vec3<T>) {
3289                self.y = other.x; self.w = other.y; self.z = other.z;
3290            }
3291
3292            fn set_zxw(&mut self, other: Vec3<T>) {
3293                self.z = other.x; self.x = other.y; self.w = other.z;
3294            }
3295
3296            fn set_zyw(&mut self, other: Vec3<T>) {
3297                self.z = other.x; self.y = other.y; self.w = other.z;
3298            }
3299
3300            fn set_zwx(&mut self, other: Vec3<T>) {
3301                self.z = other.x; self.w = other.y; self.x = other.z;
3302            }
3303
3304            fn set_zwy(&mut self, other: Vec3<T>) {
3305                self.z = other.x; self.w = other.y; self.y = other.z;
3306            }
3307
3308            fn set_wxy(&mut self, other: Vec3<T>) {
3309                self.w = other.x; self.x = other.y; self.y = other.z;
3310            }
3311
3312            fn set_wxz(&mut self, other: Vec3<T>) {
3313                self.w = other.x; self.x = other.y; self.z = other.z;
3314            }
3315
3316            fn set_wyx(&mut self, other: Vec3<T>) {
3317                self.w = other.x; self.y = other.y; self.x = other.z;
3318            }
3319
3320            fn set_wyz(&mut self, other: Vec3<T>) {
3321                self.w = other.x; self.y = other.y; self.z = other.z;
3322            }
3323
3324            fn set_wzx(&mut self, other: Vec3<T>) {
3325                self.w = other.x; self.z = other.y; self.x = other.z;
3326            }
3327
3328            fn set_wzy(&mut self, other: Vec3<T>) {
3329                self.w = other.x; self.z = other.y; self.y = other.z;
3330            }
3331
3332            fn set_xyzw(&mut self, other: Vec4<T>) {
3333                self.x = other.x;
3334                self.y = other.y;
3335                self.z = other.z;
3336                self.w = other.w;
3337            }
3338
3339            fn set_xywz(&mut self, other: Vec4<T>) {
3340                self.x = other.x;
3341                self.y = other.y;
3342                self.z = other.w;
3343                self.w = other.z;
3344            }
3345
3346            fn set_xzyw(&mut self, other: Vec4<T>) {
3347                self.x = other.x;
3348                self.y = other.z;
3349                self.z = other.y;
3350                self.w = other.w;
3351            }
3352
3353            fn set_xzwy(&mut self, other: Vec4<T>) {
3354                self.x = other.x;
3355                self.y = other.z;
3356                self.z = other.w;
3357                self.w = other.y;
3358            }
3359
3360            fn set_xwyz(&mut self, other: Vec4<T>) {
3361                self.x = other.x;
3362                self.y = other.w;
3363                self.z = other.y;
3364                self.w = other.z;
3365            }
3366
3367            fn set_xwzy(&mut self, other: Vec4<T>) {
3368                self.x = other.x;
3369                self.y = other.w;
3370                self.z = other.z;
3371                self.w = other.y;
3372            }
3373
3374            fn set_yxzw(&mut self, other: Vec4<T>) {
3375                self.x = other.y;
3376                self.y = other.x;
3377                self.z = other.z;
3378                self.w = other.w;
3379            }
3380
3381            fn set_yxwz(&mut self, other: Vec4<T>) {
3382                self.x = other.y;
3383                self.y = other.x;
3384                self.z = other.w;
3385                self.w = other.z;
3386            }
3387
3388            fn set_yzxw(&mut self, other: Vec4<T>) {
3389                self.x = other.y;
3390                self.y = other.z;
3391                self.z = other.x;
3392                self.w = other.w;
3393            }
3394
3395            fn set_yzwx(&mut self, other: Vec4<T>) {
3396                self.x = other.y;
3397                self.y = other.z;
3398                self.z = other.w;
3399                self.w = other.x;
3400            }
3401
3402            fn set_ywxz(&mut self, other: Vec4<T>) {
3403                self.x = other.y;
3404                self.y = other.w;
3405                self.z = other.x;
3406                self.w = other.z;
3407            }
3408
3409            fn set_ywzx(&mut self, other: Vec4<T>) {
3410                self.x = other.y;
3411                self.y = other.w;
3412                self.z = other.z;
3413                self.w = other.x;
3414            }
3415
3416            fn set_zxyw(&mut self, other: Vec4<T>) {
3417                self.x = other.z;
3418                self.y = other.x;
3419                self.z = other.y;
3420                self.w = other.w;
3421            }
3422
3423            fn set_zxwy(&mut self, other: Vec4<T>) {
3424                self.x = other.z;
3425                self.y = other.x;
3426                self.z = other.w;
3427                self.w = other.y;
3428            }
3429
3430            fn set_zyxw(&mut self, other: Vec4<T>) {
3431                self.x = other.z;
3432                self.y = other.y;
3433                self.z = other.x;
3434                self.w = other.w;
3435            }
3436
3437            fn set_zywx(&mut self, other: Vec4<T>) {
3438                self.x = other.z;
3439                self.y = other.y;
3440                self.z = other.w;
3441                self.w = other.x;
3442            }
3443
3444            fn set_zwxy(&mut self, other: Vec4<T>) {
3445                self.x = other.z;
3446                self.y = other.w;
3447                self.z = other.x;
3448                self.w = other.y;
3449            }
3450
3451            fn set_zwyx(&mut self, other: Vec4<T>) {
3452                self.x = other.z;
3453                self.y = other.w;
3454                self.z = other.y;
3455                self.w = other.x;
3456            }
3457
3458            fn set_wxyz(&mut self, other: Vec4<T>) {
3459                self.x = other.w;
3460                self.y = other.x;
3461                self.z = other.y;
3462                self.w = other.z;
3463            }
3464
3465            fn set_wxzy(&mut self, other: Vec4<T>) {
3466                self.x = other.w;
3467                self.y = other.x;
3468                self.z = other.z;
3469                self.w = other.y;
3470            }
3471
3472            fn set_wyxz(&mut self, other: Vec4<T>) {
3473                self.x = other.w;
3474                self.y = other.y;
3475                self.z = other.x;
3476                self.w = other.z;
3477            }
3478
3479            fn set_wyzx(&mut self, other: Vec4<T>) {
3480                self.x = other.w;
3481                self.y = other.y;
3482                self.z = other.z;
3483                self.w = other.x;
3484            }
3485
3486            fn set_wzxy(&mut self, other: Vec4<T>) {
3487                self.x = other.w;
3488                self.y = other.z;
3489                self.z = other.x;
3490                self.w = other.y;
3491            }
3492
3493            fn set_wzyx(&mut self, other: Vec4<T>) {
3494                self.x = other.w;
3495                self.y = other.z;
3496                self.z = other.y;
3497                self.w = other.x;
3498            }
3499        }
3500    }
3501}
3502
3503v2_swizzle_impl!(Vec2);
3504v2_swizzle_impl!(Vec3);
3505v2_swizzle_impl!(Vec4);
3506v3_swizzle_impl!(Vec3);
3507v3_swizzle_impl!(Vec4);
3508v4_swizzle_impl!(Vec4);