20#ifndef FENNEC_MATH_VECTOR_STORAGE_H
21#define FENNEC_MATH_VECTOR_STORAGE_H
23#if FENNEC_COMPILER_GCC
24#pragma GCC diagnostic push
25#pragma GCC diagnostic ignored "-Wpedantic"
28#if FENNEC_COMPILER_MSVC
30#pragma warning(disable:4201)
33namespace fennec::detail
41 template<
size_t SizeV,
template<
size_t...>
class SwizzleGenT,
typename DataT>
struct vector_storage;
45 template <
template <
size_t...>
class SwizzleGenT,
typename DataT>
46 struct vector_storage<1, SwizzleGenT, DataT>
48 template<
size_t...IndicesV>
using swizzle =
typename SwizzleGenT<IndicesV...>::type;
50 vector_storage() =
default;
55 struct { swizzle<0> x; };
56 struct { swizzle<0> s; };
57 struct { swizzle<0> t; };
59 swizzle<0, 0> xx, rr, ss;
61 swizzle<0, 0, 0> xxx, rrr, sss;
63 swizzle<0, 0, 0, 0> xxxx, rrrr, ssss;
69 template <
template <
size_t...>
class SwizzleGenT,
typename DataT>
70 struct vector_storage<2, SwizzleGenT, DataT>
74 template<
size_t...IndicesV>
using swizzle =
typename SwizzleGenT<IndicesV...>::type;
76 vector_storage() =
default;
81 struct { swizzle<0> x; swizzle<1>
y; };
82 struct { swizzle<0> s; swizzle<1> t; };
83 struct { swizzle<0> r; swizzle<1> g; };
85 swizzle<0,0> xx, rr, ss;
86 swizzle<0,1> xy, rg, st;
87 swizzle<1,0> yx, gr, ts;
88 swizzle<1,1> yy, gg, tt;
89 swizzle<0,0,0> xxx, rrr, sss;
90 swizzle<0,0,1> xxy, rrg, sst;
91 swizzle<0,1,0> xyx, rgr, sts;
92 swizzle<0,1,1> xyy, rgg, stt;
93 swizzle<1,0,0> yxx, grr, tss;
94 swizzle<1,0,1> yxy, grg, tst;
95 swizzle<1,1,0> yyx, ggr, tts;
96 swizzle<1,1,1> yyy, ggg, ttt;
97 swizzle<0,0,0,0> xxxx, rrrr, ssss;
98 swizzle<0,0,0,1> xxxy, rrrg, ssst;
99 swizzle<0,0,1,0> xxyx, rrgr, ssts;
100 swizzle<0,0,1,1> xxyy, rrgg, sstt;
101 swizzle<0,1,0,0> xyxx, rgrr, stss;
102 swizzle<0,1,0,1> xyxy, rgrg, stst;
103 swizzle<0,1,1,0> xyyx, rggr, stts;
104 swizzle<0,1,1,1> xyyy, rggg, sttt;
105 swizzle<1,0,0,0> yxxx, grrr, tsss;
106 swizzle<1,0,0,1> yxxy, grrg, tsst;
107 swizzle<1,0,1,0> yxyx, grgr, tsts;
108 swizzle<1,0,1,1> yxyy, grgg, tstt;
109 swizzle<1,1,0,0> yyxx, ggrr, ttss;
110 swizzle<1,1,0,1> yyxy, ggrg, ttst;
111 swizzle<1,1,1,0> yyyx, gggr, ttts;
112 swizzle<1,1,1,1> yyyy, gggg, tttt;
118 template <
template <
size_t...>
class SwizzleGenT,
typename DataT>
119 struct vector_storage<3, SwizzleGenT, DataT>
121 template<
size_t...IndicesV>
using swizzle =
typename SwizzleGenT<IndicesV...>::type;
123 vector_storage() =
default;
128 struct { swizzle<0> x; swizzle<1>
y; swizzle<2> z; };
129 struct { swizzle<0> s; swizzle<1> t; swizzle<2> p; };
130 struct { swizzle<0> r; swizzle<1> g; swizzle<2> b; };
132 swizzle<0,0> xx, rr, ss;
133 swizzle<0,1> xy, rg, st;
134 swizzle<0,2> xz, rb, sp;
135 swizzle<1,0> yx, gr, ts;
136 swizzle<1,1> yy, gg, tt;
137 swizzle<1,2> yz, gb, tp;
138 swizzle<2,0> zx, br, ps;
139 swizzle<2,1> zy, bg, pt;
140 swizzle<2,2> zz, bb, pp;
141 swizzle<0,0,0> xxx, rrr, sss;
142 swizzle<0,0,1> xxy, rrg, sst;
143 swizzle<0,0,2> xxz, rrb, ssp;
144 swizzle<0,1,0> xyx, rgr, sts;
145 swizzle<0,1,1> xyy, rgg, stt;
146 swizzle<0,1,2> xyz, rgb, stp;
147 swizzle<0,2,0> xzx, rbr, sps;
148 swizzle<0,2,1> xzy, rbg, spt;
149 swizzle<0,2,2> xzz, rbb, spp;
150 swizzle<1,0,0> yxx, grr, tss;
151 swizzle<1,0,1> yxy, grg, tst;
152 swizzle<1,0,2> yxz, grb, tsp;
153 swizzle<1,1,0> yyx, ggr, tts;
154 swizzle<1,1,1> yyy, ggg, ttt;
155 swizzle<1,1,2> yyz, ggb, ttp;
156 swizzle<1,2,0> yzx, gbr, tps;
157 swizzle<1,2,1> yzy, gbg, tpt;
158 swizzle<1,2,2> yzz, gbb, tpp;
159 swizzle<2,0,0> zxx, brr, pss;
160 swizzle<2,0,1> zxy, brg, pst;
161 swizzle<2,0,2> zxz, brb, psp;
162 swizzle<2,1,0> zyx, bgr, pts;
163 swizzle<2,1,1> zyy, bgg, ptt;
164 swizzle<2,1,2> zyz, bgb, ptp;
165 swizzle<2,2,0> zzx, bbr, pps;
166 swizzle<2,2,1> zzy, bbg, ppt;
167 swizzle<2,2,2> zzz, bbb, ppp;
168 swizzle<0,0,0,0> xxxx, rrrr, ssss;
169 swizzle<0,0,0,1> xxxy, rrrg, ssst;
170 swizzle<0,0,0,2> xxxz, rrrb, sssp;
171 swizzle<0,0,1,0> xxyx, rrgr, ssts;
172 swizzle<0,0,1,1> xxyy, rrgg, sstt;
173 swizzle<0,0,1,2> xxyz, rrgb, sstp;
174 swizzle<0,0,2,0> xxzx, rrbr, ssps;
175 swizzle<0,0,2,1> xxzy, rrbg, sspt;
176 swizzle<0,0,2,2> xxzz, rrbb, sspp;
177 swizzle<0,1,0,0> xyxx, rgrr, stss;
178 swizzle<0,1,0,1> xyxy, rgrg, stst;
179 swizzle<0,1,0,2> xyxz, rgrb, stsp;
180 swizzle<0,1,1,0> xyyx, rggr, stts;
181 swizzle<0,1,1,1> xyyy, rggg, sttt;
182 swizzle<0,1,1,2> xyyz, rggb, sttp;
183 swizzle<0,1,2,0> xyzx, rgbr, stps;
184 swizzle<0,1,2,1> xyzy, rgbg, stpt;
185 swizzle<0,1,2,2> xyzz, rgbb, stpp;
186 swizzle<0,2,0,0> xzxx, rbrr, spss;
187 swizzle<0,2,0,1> xzxy, rbrg, spst;
188 swizzle<0,2,0,2> xzxz, rbrb, spsp;
189 swizzle<0,2,1,0> xzyx, rbgr, spts;
190 swizzle<0,2,1,1> xzyy, rbgg, sptt;
191 swizzle<0,2,1,2> xzyz, rbgb, sptp;
192 swizzle<0,2,2,0> xzzx, rbbr, spps;
193 swizzle<0,2,2,1> xzzy, rbbg, sppt;
194 swizzle<0,2,2,2> xzzz, rbbb, sppp;
195 swizzle<1,0,0,0> yxxx, grrr, tsss;
196 swizzle<1,0,0,1> yxxy, grrg, tsst;
197 swizzle<1,0,0,2> yxxz, grrb, tssp;
198 swizzle<1,0,1,0> yxyx, grgr, tsts;
199 swizzle<1,0,1,1> yxyy, grgg, tstt;
200 swizzle<1,0,1,2> yxyz, grgb, tstp;
201 swizzle<1,0,2,0> yxzx, grbr, tsps;
202 swizzle<1,0,2,1> yxzy, grbg, tspt;
203 swizzle<1,0,2,2> yxzz, grbb, tspp;
204 swizzle<1,1,0,0> yyxx, ggrr, ttss;
205 swizzle<1,1,0,1> yyxy, ggrg, ttst;
206 swizzle<1,1,0,2> yyxz, ggrb, ttsp;
207 swizzle<1,1,1,0> yyyx, gggr, ttts;
208 swizzle<1,1,1,1> yyyy, gggg, tttt;
209 swizzle<1,1,1,2> yyyz, gggb, tttp;
210 swizzle<1,1,2,0> yyzx, ggbr, ttps;
211 swizzle<1,1,2,1> yyzy, ggbg, ttpt;
212 swizzle<1,1,2,2> yyzz, ggbb, ttpp;
213 swizzle<1,2,0,0> yzxx, gbrr, tpss;
214 swizzle<1,2,0,1> yzxy, gbrg, tpst;
215 swizzle<1,2,0,2> yzxz, gbrb, tpsp;
216 swizzle<1,2,1,0> yzyx, gbgr, tpts;
217 swizzle<1,2,1,1> yzyy, gbgg, tptt;
218 swizzle<1,2,1,2> yzyz, gbgb, tptp;
219 swizzle<1,2,2,0> yzzx, gbbr, tpps;
220 swizzle<1,2,2,1> yzzy, gbbg, tppt;
221 swizzle<1,2,2,2> yzzz, gbbb, tppp;
222 swizzle<2,0,0,0> zxxx, brrr, psss;
223 swizzle<2,0,0,1> zxxy, brrg, psst;
224 swizzle<2,0,0,2> zxxz, brrb, pssp;
225 swizzle<2,0,1,0> zxyx, brgr, psts;
226 swizzle<2,0,1,1> zxyy, brgg, pstt;
227 swizzle<2,0,1,2> zxyz, brgb, pstp;
228 swizzle<2,0,2,0> zxzx, brbr, psps;
229 swizzle<2,0,2,1> zxzy, brbg, pspt;
230 swizzle<2,0,2,2> zxzz, brbb, pspp;
231 swizzle<2,1,0,0> zyxx, bgrr, ptss;
232 swizzle<2,1,0,1> zyxy, bgrg, ptst;
233 swizzle<2,1,0,2> zyxz, bgrb, ptsp;
234 swizzle<2,1,1,0> zyyx, bggr, ptts;
235 swizzle<2,1,1,1> zyyy, bggg, pttt;
236 swizzle<2,1,1,2> zyyz, bggb, pttp;
237 swizzle<2,1,2,0> zyzx, bgbr, ptps;
238 swizzle<2,1,2,1> zyzy, bgbg, ptpt;
239 swizzle<2,1,2,2> zyzz, bgbb, ptpp;
240 swizzle<2,2,0,0> zzxx, bbrr, ppss;
241 swizzle<2,2,0,1> zzxy, bbrg, ppst;
242 swizzle<2,2,0,2> zzxz, bbrb, ppsp;
243 swizzle<2,2,1,0> zzyx, bbgr, ppts;
244 swizzle<2,2,1,1> zzyy, bbgg, pptt;
245 swizzle<2,2,1,2> zzyz, bbgb, pptp;
246 swizzle<2,2,2,0> zzzx, bbbr, ppps;
247 swizzle<2,2,2,1> zzzy, bbbg, pppt;
248 swizzle<2,2,2,2> zzzz, bbbb, pppp;
254 template <
template <
size_t...>
class SwizzleGenT,
typename DataT>
255 struct vector_storage<4, SwizzleGenT, DataT>
257 template<
size_t...IndicesV>
using swizzle =
typename SwizzleGenT<IndicesV...>::type;
259 vector_storage() =
default;
264 struct { swizzle<0> x; swizzle<1>
y; swizzle<2> z; swizzle<3> w; };
265 struct { swizzle<0> s; swizzle<1> t; swizzle<2> p; swizzle<3> q; };
266 struct { swizzle<0> r; swizzle<1> g; swizzle<2> b; swizzle<3> a; };
268 swizzle<0,0> xx, rr, ss;
269 swizzle<0,1> xy, rg, st;
270 swizzle<0,2> xz, rb, sp;
271 swizzle<0,3> xw, ra, sq;
272 swizzle<1,0> yx, gr, ts;
273 swizzle<1,1> yy, gg, tt;
274 swizzle<1,2> yz, gb, tp;
275 swizzle<1,3> yw, ga, tq;
276 swizzle<2,0> zx, br, ps;
277 swizzle<2,1> zy, bg, pt;
278 swizzle<2,2> zz, bb, pp;
279 swizzle<2,3> zw, ba, pq;
280 swizzle<3,0> wx, ar, qs;
281 swizzle<3,1> wy, ag, qt;
282 swizzle<3,2> wz, ab, qp;
283 swizzle<3,3> ww, aa, qq;
284 swizzle<0,0,0> xxx, rrr, sss;
285 swizzle<0,0,1> xxy, rrg, sst;
286 swizzle<0,0,2> xxz, rrb, ssp;
287 swizzle<0,0,3> xxw, rra, ssq;
288 swizzle<0,1,0> xyx, rgr, sts;
289 swizzle<0,1,1> xyy, rgg, stt;
290 swizzle<0,1,2> xyz, rgb, stp;
291 swizzle<0,1,3> xyw, rga, stq;
292 swizzle<0,2,0> xzx, rbr, sps;
293 swizzle<0,2,1> xzy, rbg, spt;
294 swizzle<0,2,2> xzz, rbb, spp;
295 swizzle<0,2,3> xzw, rba, spq;
296 swizzle<0,3,0> xwx, rar, sqs;
297 swizzle<0,3,1> xwy, rag, sqt;
298 swizzle<0,3,2> xwz, rab, sqp;
299 swizzle<0,3,3> xww, raa, sqq;
300 swizzle<1,0,0> yxx, grr, tss;
301 swizzle<1,0,1> yxy, grg, tst;
302 swizzle<1,0,2> yxz, grb, tsp;
303 swizzle<1,0,3> yxw, gra, tsq;
304 swizzle<1,1,0> yyx, ggr, tts;
305 swizzle<1,1,1> yyy, ggg, ttt;
306 swizzle<1,1,2> yyz, ggb, ttp;
307 swizzle<1,1,3> yyw, gga, ttq;
308 swizzle<1,2,0> yzx, gbr, tps;
309 swizzle<1,2,1> yzy, gbg, tpt;
310 swizzle<1,2,2> yzz, gbb, tpp;
311 swizzle<1,2,3> yzw, gba, tpq;
312 swizzle<1,3,0> ywx, gar, tqs;
313 swizzle<1,3,1> ywy, gag, tqt;
314 swizzle<1,3,2> ywz, gab, tqp;
315 swizzle<1,3,3> yww, gaa, tqq;
316 swizzle<2,0,0> zxx, brr, pss;
317 swizzle<2,0,1> zxy, brg, pst;
318 swizzle<2,0,2> zxz, brb, psp;
319 swizzle<2,0,3> zxw, bra, psq;
320 swizzle<2,1,0> zyx, bgr, pts;
321 swizzle<2,1,1> zyy, bgg, ptt;
322 swizzle<2,1,2> zyz, bgb, ptp;
323 swizzle<2,1,3> zyw, bga, ptq;
324 swizzle<2,2,0> zzx, bbr, pps;
325 swizzle<2,2,1> zzy, bbg, ppt;
326 swizzle<2,2,2> zzz, bbb, ppp;
327 swizzle<2,2,3> zzw, bba, ppq;
328 swizzle<2,3,0> zwx, bar, pqs;
329 swizzle<2,3,1> zwy, bag, pqt;
330 swizzle<2,3,2> zwz, bab, pqp;
331 swizzle<2,3,3> zww, baa, pqq;
332 swizzle<3,0,0> wxx, arr, qss;
333 swizzle<3,0,1> wxy, arg, qst;
334 swizzle<3,0,2> wxz, arb, qsp;
335 swizzle<3,0,3> wxw, ara, qsq;
336 swizzle<3,1,0> wyx, agr, qts;
337 swizzle<3,1,1> wyy, agg, qtt;
338 swizzle<3,1,2> wyz, agb, qtp;
339 swizzle<3,1,3> wyw, aga, qtq;
340 swizzle<3,2,0> wzx, abr, qps;
341 swizzle<3,2,1> wzy, abg, qpt;
342 swizzle<3,2,2> wzz, abb, qpp;
343 swizzle<3,2,3> wzw, aba, qpq;
344 swizzle<3,3,0> wwx, aar, qqs;
345 swizzle<3,3,1> wwy, aag, qqt;
346 swizzle<3,3,2> wwz, aab, qqp;
347 swizzle<3,3,3> www, aaa, qqq;
348 swizzle<0,0,0,0> xxxx, rrrr, ssss;
349 swizzle<0,0,0,1> xxxy, rrrg, ssst;
350 swizzle<0,0,0,2> xxxz, rrrb, sssp;
351 swizzle<0,0,0,3> xxxw, rrra, sssq;
352 swizzle<0,0,1,0> xxyx, rrgr, ssts;
353 swizzle<0,0,1,1> xxyy, rrgg, sstt;
354 swizzle<0,0,1,2> xxyz, rrgb, sstp;
355 swizzle<0,0,1,3> xxyw, rrga, sstq;
356 swizzle<0,0,2,0> xxzx, rrbr, ssps;
357 swizzle<0,0,2,1> xxzy, rrbg, sspt;
358 swizzle<0,0,2,2> xxzz, rrbb, sspp;
359 swizzle<0,0,2,3> xxzw, rrba, sspq;
360 swizzle<0,0,3,0> xxwx, rrar, ssqs;
361 swizzle<0,0,3,1> xxwy, rrag, ssqt;
362 swizzle<0,0,3,2> xxwz, rrab, ssqp;
363 swizzle<0,0,3,3> xxww, rraa, ssqq;
364 swizzle<0,1,0,0> xyxx, rgrr, stss;
365 swizzle<0,1,0,1> xyxy, rgrg, stst;
366 swizzle<0,1,0,2> xyxz, rgrb, stsp;
367 swizzle<0,1,0,3> xyxw, rgra, stsq;
368 swizzle<0,1,1,0> xyyx, rggr, stts;
369 swizzle<0,1,1,1> xyyy, rggg, sttt;
370 swizzle<0,1,1,2> xyyz, rggb, sttp;
371 swizzle<0,1,1,3> xyyw, rgga, sttq;
372 swizzle<0,1,2,0> xyzx, rgbr, stps;
373 swizzle<0,1,2,1> xyzy, rgbg, stpt;
374 swizzle<0,1,2,2> xyzz, rgbb, stpp;
375 swizzle<0,1,2,3> xyzw, rgba, stpq;
376 swizzle<0,1,3,0> xywx, rgar, stqs;
377 swizzle<0,1,3,1> xywy, rgag, stqt;
378 swizzle<0,1,3,2> xywz, rgab, stqp;
379 swizzle<0,1,3,3> xyww, rgaa, stqq;
380 swizzle<0,2,0,0> xzxx, rbrr, spss;
381 swizzle<0,2,0,1> xzxy, rbrg, spst;
382 swizzle<0,2,0,2> xzxz, rbrb, spsp;
383 swizzle<0,2,0,3> xzxw, rbra, spsq;
384 swizzle<0,2,1,0> xzyx, rbgr, spts;
385 swizzle<0,2,1,1> xzyy, rbgg, sptt;
386 swizzle<0,2,1,2> xzyz, rbgb, sptp;
387 swizzle<0,2,1,3> xzyw, rbga, sptq;
388 swizzle<0,2,2,0> xzzx, rbbr, spps;
389 swizzle<0,2,2,1> xzzy, rbbg, sppt;
390 swizzle<0,2,2,2> xzzz, rbbb, sppp;
391 swizzle<0,2,2,3> xzzw, rbba, sppq;
392 swizzle<0,2,3,0> xzwx, rbar, spqs;
393 swizzle<0,2,3,1> xzwy, rbag, spqt;
394 swizzle<0,2,3,2> xzwz, rbab, spqp;
395 swizzle<0,2,3,3> xzww, rbaa, spqq;
396 swizzle<0,3,0,0> xwxx, rarr, sqss;
397 swizzle<0,3,0,1> xwxy, rarg, sqst;
398 swizzle<0,3,0,2> xwxz, rarb, sqsp;
399 swizzle<0,3,0,3> xwxw, rara, sqsq;
400 swizzle<0,3,1,0> xwyx, ragr, sqts;
401 swizzle<0,3,1,1> xwyy, ragg, sqtt;
402 swizzle<0,3,1,2> xwyz, ragb, sqtp;
403 swizzle<0,3,1,3> xwyw, raga, sqtq;
404 swizzle<0,3,2,0> xwzx, rabr, sqps;
405 swizzle<0,3,2,1> xwzy, rabg, sqpt;
406 swizzle<0,3,2,2> xwzz, rabb, sqpp;
407 swizzle<0,3,2,3> xwzw, raba, sqpq;
408 swizzle<0,3,3,0> xwwx, raar, sqqs;
409 swizzle<0,3,3,1> xwwy, raag, sqqt;
410 swizzle<0,3,3,2> xwwz, raab, sqqp;
411 swizzle<0,3,3,3> xwww, raaa, sqqq;
412 swizzle<1,0,0,0> yxxx, grrr, tsss;
413 swizzle<1,0,0,1> yxxy, grrg, tsst;
414 swizzle<1,0,0,2> yxxz, grrb, tssp;
415 swizzle<1,0,0,3> yxxw, grra, tssq;
416 swizzle<1,0,1,0> yxyx, grgr, tsts;
417 swizzle<1,0,1,1> yxyy, grgg, tstt;
418 swizzle<1,0,1,2> yxyz, grgb, tstp;
419 swizzle<1,0,1,3> yxyw, grga, tstq;
420 swizzle<1,0,2,0> yxzx, grbr, tsps;
421 swizzle<1,0,2,1> yxzy, grbg, tspt;
422 swizzle<1,0,2,2> yxzz, grbb, tspp;
423 swizzle<1,0,2,3> yxzw, grba, tspq;
424 swizzle<1,0,3,0> yxwx, grar, tsqs;
425 swizzle<1,0,3,1> yxwy, grag, tsqt;
426 swizzle<1,0,3,2> yxwz, grab, tsqp;
427 swizzle<1,0,3,3> yxww, graa, tsqq;
428 swizzle<1,1,0,0> yyxx, ggrr, ttss;
429 swizzle<1,1,0,1> yyxy, ggrg, ttst;
430 swizzle<1,1,0,2> yyxz, ggrb, ttsp;
431 swizzle<1,1,0,3> yyxw, ggra, ttsq;
432 swizzle<1,1,1,0> yyyx, gggr, ttts;
433 swizzle<1,1,1,1> yyyy, gggg, tttt;
434 swizzle<1,1,1,2> yyyz, gggb, tttp;
435 swizzle<1,1,1,3> yyyw, ggga, tttq;
436 swizzle<1,1,2,0> yyzx, ggbr, ttps;
437 swizzle<1,1,2,1> yyzy, ggbg, ttpt;
438 swizzle<1,1,2,2> yyzz, ggbb, ttpp;
439 swizzle<1,1,2,3> yyzw, ggba, ttpq;
440 swizzle<1,1,3,0> yywx, ggar, ttqs;
441 swizzle<1,1,3,1> yywy, ggag, ttqt;
442 swizzle<1,1,3,2> yywz, ggab, ttqp;
443 swizzle<1,1,3,3> yyww, ggaa, ttqq;
444 swizzle<1,2,0,0> yzxx, gbrr, tpss;
445 swizzle<1,2,0,1> yzxy, gbrg, tpst;
446 swizzle<1,2,0,2> yzxz, gbrb, tpsp;
447 swizzle<1,2,0,3> yzxw, gbra, tpsq;
448 swizzle<1,2,1,0> yzyx, gbgr, tpts;
449 swizzle<1,2,1,1> yzyy, gbgg, tptt;
450 swizzle<1,2,1,2> yzyz, gbgb, tptp;
451 swizzle<1,2,1,3> yzyw, gbga, tptq;
452 swizzle<1,2,2,0> yzzx, gbbr, tpps;
453 swizzle<1,2,2,1> yzzy, gbbg, tppt;
454 swizzle<1,2,2,2> yzzz, gbbb, tppp;
455 swizzle<1,2,2,3> yzzw, gbba, tppq;
456 swizzle<1,2,3,0> yzwx, gbar, tpqs;
457 swizzle<1,2,3,1> yzwy, gbag, tpqt;
458 swizzle<1,2,3,2> yzwz, gbab, tpqp;
459 swizzle<1,2,3,3> yzww, gbaa, tpqq;
460 swizzle<1,3,0,0> ywxx, garr, tqss;
461 swizzle<1,3,0,1> ywxy, garg, tqst;
462 swizzle<1,3,0,2> ywxz, garb, tqsp;
463 swizzle<1,3,0,3> ywxw, gara, tqsq;
464 swizzle<1,3,1,0> ywyx, gagr, tqts;
465 swizzle<1,3,1,1> ywyy, gagg, tqtt;
466 swizzle<1,3,1,2> ywyz, gagb, tqtp;
467 swizzle<1,3,1,3> ywyw, gaga, tqtq;
468 swizzle<1,3,2,0> ywzx, gabr, tqps;
469 swizzle<1,3,2,1> ywzy, gabg, tqpt;
470 swizzle<1,3,2,2> ywzz, gabb, tqpp;
471 swizzle<1,3,2,3> ywzw, gaba, tqpq;
472 swizzle<1,3,3,0> ywwx, gaar, tqqs;
473 swizzle<1,3,3,1> ywwy, gaag, tqqt;
474 swizzle<1,3,3,2> ywwz, gaab, tqqp;
475 swizzle<1,3,3,3> ywww, gaaa, tqqq;
476 swizzle<2,0,0,0> zxxx, brrr, psss;
477 swizzle<2,0,0,1> zxxy, brrg, psst;
478 swizzle<2,0,0,2> zxxz, brrb, pssp;
479 swizzle<2,0,0,3> zxxw, brra, pssq;
480 swizzle<2,0,1,0> zxyx, brgr, psts;
481 swizzle<2,0,1,1> zxyy, brgg, pstt;
482 swizzle<2,0,1,2> zxyz, brgb, pstp;
483 swizzle<2,0,1,3> zxyw, brga, pstq;
484 swizzle<2,0,2,0> zxzx, brbr, psps;
485 swizzle<2,0,2,1> zxzy, brbg, pspt;
486 swizzle<2,0,2,2> zxzz, brbb, pspp;
487 swizzle<2,0,2,3> zxzw, brba, pspq;
488 swizzle<2,0,3,0> zxwx, brar, psqs;
489 swizzle<2,0,3,1> zxwy, brag, psqt;
490 swizzle<2,0,3,2> zxwz, brab, psqp;
491 swizzle<2,0,3,3> zxww, braa, psqq;
492 swizzle<2,1,0,0> zyxx, bgrr, ptss;
493 swizzle<2,1,0,1> zyxy, bgrg, ptst;
494 swizzle<2,1,0,2> zyxz, bgrb, ptsp;
495 swizzle<2,1,0,3> zyxw, bgra, ptsq;
496 swizzle<2,1,1,0> zyyx, bggr, ptts;
497 swizzle<2,1,1,1> zyyy, bggg, pttt;
498 swizzle<2,1,1,2> zyyz, bggb, pttp;
499 swizzle<2,1,1,3> zyyw, bgga, pttq;
500 swizzle<2,1,2,0> zyzx, bgbr, ptps;
501 swizzle<2,1,2,1> zyzy, bgbg, ptpt;
502 swizzle<2,1,2,2> zyzz, bgbb, ptpp;
503 swizzle<2,1,2,3> zyzw, bgba, ptpq;
504 swizzle<2,1,3,0> zywx, bgar, ptqs;
505 swizzle<2,1,3,1> zywy, bgag, ptqt;
506 swizzle<2,1,3,2> zywz, bgab, ptqp;
507 swizzle<2,1,3,3> zyww, bgaa, ptqq;
508 swizzle<2,2,0,0> zzxx, bbrr, ppss;
509 swizzle<2,2,0,1> zzxy, bbrg, ppst;
510 swizzle<2,2,0,2> zzxz, bbrb, ppsp;
511 swizzle<2,2,0,3> zzxw, bbra, ppsq;
512 swizzle<2,2,1,0> zzyx, bbgr, ppts;
513 swizzle<2,2,1,1> zzyy, bbgg, pptt;
514 swizzle<2,2,1,2> zzyz, bbgb, pptp;
515 swizzle<2,2,1,3> zzyw, bbga, pptq;
516 swizzle<2,2,2,0> zzzx, bbbr, ppps;
517 swizzle<2,2,2,1> zzzy, bbbg, pppt;
518 swizzle<2,2,2,2> zzzz, bbbb, pppp;
519 swizzle<2,2,2,3> zzzw, bbba, pppq;
520 swizzle<2,2,3,0> zzwx, bbar, ppqs;
521 swizzle<2,2,3,1> zzwy, bbag, ppqt;
522 swizzle<2,2,3,2> zzwz, bbab, ppqp;
523 swizzle<2,2,3,3> zzww, bbaa, ppqq;
524 swizzle<2,3,0,0> zwxx, barr, pqss;
525 swizzle<2,3,0,1> zwxy, barg, pqst;
526 swizzle<2,3,0,2> zwxz, barb, pqsp;
527 swizzle<2,3,0,3> zwxw, bara, pqsq;
528 swizzle<2,3,1,0> zwyx, bagr, pqts;
529 swizzle<2,3,1,1> zwyy, bagg, pqtt;
530 swizzle<2,3,1,2> zwyz, bagb, pqtp;
531 swizzle<2,3,1,3> zwyw, baga, pqtq;
532 swizzle<2,3,2,0> zwzx, babr, pqps;
533 swizzle<2,3,2,1> zwzy, babg, pqpt;
534 swizzle<2,3,2,2> zwzz, babb, pqpp;
535 swizzle<2,3,2,3> zwzw, baba, pqpq;
536 swizzle<2,3,3,0> zwwx, baar, pqqs;
537 swizzle<2,3,3,1> zwwy, baag, pqqt;
538 swizzle<2,3,3,2> zwwz, baab, pqqp;
539 swizzle<2,3,3,3> zwww, baaa, pqqq;
540 swizzle<3,0,0,0> wxxx, arrr, qsss;
541 swizzle<3,0,0,1> wxxy, arrg, qsst;
542 swizzle<3,0,0,2> wxxz, arrb, qssp;
543 swizzle<3,0,0,3> wxxw, arra, qssq;
544 swizzle<3,0,1,0> wxyx, argr, qsts;
545 swizzle<3,0,1,1> wxyy, argg, qstt;
546 swizzle<3,0,1,2> wxyz, argb, qstp;
547 swizzle<3,0,1,3> wxyw, arga, qstq;
548 swizzle<3,0,2,0> wxzx, arbr, qsps;
549 swizzle<3,0,2,1> wxzy, arbg, qspt;
550 swizzle<3,0,2,2> wxzz, arbb, qspp;
551 swizzle<3,0,2,3> wxzw, arba, qspq;
552 swizzle<3,0,3,0> wxwx, arar, qsqs;
553 swizzle<3,0,3,1> wxwy, arag, qsqt;
554 swizzle<3,0,3,2> wxwz, arab, qsqp;
555 swizzle<3,0,3,3> wxww, araa, qsqq;
556 swizzle<3,1,0,0> wyxx, agrr, qtss;
557 swizzle<3,1,0,1> wyxy, agrg, qtst;
558 swizzle<3,1,0,2> wyxz, agrb, qtsp;
559 swizzle<3,1,0,3> wyxw, agra, qtsq;
560 swizzle<3,1,1,0> wyyx, aggr, qtts;
561 swizzle<3,1,1,1> wyyy, aggg, qttt;
562 swizzle<3,1,1,2> wyyz, aggb, qttp;
563 swizzle<3,1,1,3> wyyw, agga, qttq;
564 swizzle<3,1,2,0> wyzx, agbr, qtps;
565 swizzle<3,1,2,1> wyzy, agbg, qtpt;
566 swizzle<3,1,2,2> wyzz, agbb, qtpp;
567 swizzle<3,1,2,3> wyzw, agba, qtpq;
568 swizzle<3,1,3,0> wywx, agar, qtqs;
569 swizzle<3,1,3,1> wywy, agag, qtqt;
570 swizzle<3,1,3,2> wywz, agab, qtqp;
571 swizzle<3,1,3,3> wyww, agaa, qtqq;
572 swizzle<3,2,0,0> wzxx, abrr, qpss;
573 swizzle<3,2,0,1> wzxy, abrg, qpst;
574 swizzle<3,2,0,2> wzxz, abrb, qpsp;
575 swizzle<3,2,0,3> wzxw, abra, qpsq;
576 swizzle<3,2,1,0> wzyx, abgr, qpts;
577 swizzle<3,2,1,1> wzyy, abgg, qptt;
578 swizzle<3,2,1,2> wzyz, abgb, qptp;
579 swizzle<3,2,1,3> wzyw, abga, qptq;
580 swizzle<3,2,2,0> wzzx, abbr, qpps;
581 swizzle<3,2,2,1> wzzy, abbg, qppt;
582 swizzle<3,2,2,2> wzzz, abbb, qppp;
583 swizzle<3,2,2,3> wzzw, abba, qppq;
584 swizzle<3,2,3,0> wzwx, abar, qpqs;
585 swizzle<3,2,3,1> wzwy, abag, qpqt;
586 swizzle<3,2,3,2> wzwz, abab, qpqp;
587 swizzle<3,2,3,3> wzww, abaa, qpqq;
588 swizzle<3,3,0,0> wwxx, aarr, qqss;
589 swizzle<3,3,0,1> wwxy, aarg, qqst;
590 swizzle<3,3,0,2> wwxz, aarb, qqsp;
591 swizzle<3,3,0,3> wwxw, aara, qqsq;
592 swizzle<3,3,1,0> wwyx, aagr, qqts;
593 swizzle<3,3,1,1> wwyy, aagg, qqtt;
594 swizzle<3,3,1,2> wwyz, aagb, qqtp;
595 swizzle<3,3,1,3> wwyw, aaga, qqtq;
596 swizzle<3,3,2,0> wwzx, aabr, qqps;
597 swizzle<3,3,2,1> wwzy, aabg, qqpt;
598 swizzle<3,3,2,2> wwzz, aabb, qqpp;
599 swizzle<3,3,2,3> wwzw, aaba, qqpq;
600 swizzle<3,3,3,0> wwwx, aaar, qqqs;
601 swizzle<3,3,3,1> wwwy, aaag, qqqt;
602 swizzle<3,3,3,2> wwwz, aaab, qqqp;
603 swizzle<3,3,3,3> wwww, aaaa, qqqq;
609#ifdef FENNEC_COMPILER_GCC
610#pragma GCC diagnostic pop
constexpr genType y()
Definition constants.h:672