From 38624cb909fbcedd06609de3c51866cc57de27fe Mon Sep 17 00:00:00 2001 From: Sam Hocevar Date: Thu, 16 Feb 2012 01:36:08 +0000 Subject: [PATCH] math: disallow using vector swizzling components as lvalues until we switch to C++11. --- src/lol/math/vector.h | 152 ++++++++++++++++++++++-------------------- 1 file changed, 78 insertions(+), 74 deletions(-) diff --git a/src/lol/math/vector.h b/src/lol/math/vector.h index 78585e18..1244140a 100644 --- a/src/lol/math/vector.h +++ b/src/lol/math/vector.h @@ -137,8 +137,8 @@ template struct Vec2 struct { T s, t; }; XVec2 const xx, rr, ss; - XVec2 xy, rg, st; - XVec2 yx, gr, ts; + XVec2 const xy, rg, st; /* lvalue */ + XVec2 const yx, gr, ts; /* lvalue */ XVec2 const yy, gg, tt; XVec3 const xxx, rrr, sss; @@ -279,13 +279,13 @@ template struct Vec3 struct { T s, t, p; }; XVec2 const xx, rr, ss; - XVec2 xy, rg, st; - XVec2 xz, rb, sp; - XVec2 yx, gr, ts; + XVec2 const xy, rg, st; /* lvalue */ + XVec2 const xz, rb, sp; /* lvalue */ + XVec2 const yx, gr, ts; /* lvalue */ XVec2 const yy, gg, tt; - XVec2 yz, gb, tp; - XVec2 zx, br, ps; - XVec2 zy, bg, pt; + XVec2 const yz, gb, tp; /* lvalue */ + XVec2 const zx, br, ps; /* lvalue */ + XVec2 const zy, bg, pt; /* lvalue */ XVec2 const zz, bb, pp; XVec3 const xxx, rrr, sss; @@ -293,23 +293,23 @@ template struct Vec3 XVec3 const xxz, rrb, ssp; XVec3 const xyx, rgr, sts; XVec3 const xyy, rgg, stt; - XVec3 xyz, rgb, stp; + XVec3 const xyz, rgb, stp; /* lvalue */ XVec3 const xzx, rbr, sps; - XVec3 xzy, rbg, spt; + XVec3 const xzy, rbg, spt; /* lvalue */ XVec3 const xzz, rbb, spp; XVec3 const yxx, grr, tss; XVec3 const yxy, grg, tst; - XVec3 yxz, grb, tsp; + XVec3 const yxz, grb, tsp; /* lvalue */ XVec3 const yyx, ggr, tts; XVec3 const yyy, ggg, ttt; XVec3 const yyz, ggb, ttp; - XVec3 yzx, gbr, tps; + XVec3 const yzx, gbr, tps; /* lvalue */ XVec3 const yzy, gbg, tpt; XVec3 const yzz, gbb, tpp; XVec3 const zxx, brr, pss; - XVec3 zxy, brg, pst; + XVec3 const zxy, brg, pst; /* lvalue */ XVec3 const zxz, brb, psp; - XVec3 zyx, bgr, pts; + XVec3 const zyx, bgr, pts; /* lvalue */ XVec3 const zyy, bgg, ptt; XVec3 const zyz, bgb, ptp; XVec3 const zzx, bbr, pps; @@ -439,20 +439,20 @@ template struct Vec4 struct { T s, t, p, q; }; XVec2 const xx, rr, ss; - XVec2 xy, rg, st; - XVec2 xz, rb, sp; - XVec2 xw, ra, sq; - XVec2 yx, gr, ts; + XVec2 const xy, rg, st; /* lvalue */ + XVec2 const xz, rb, sp; /* lvalue */ + XVec2 const xw, ra, sq; /* lvalue */ + XVec2 const yx, gr, ts; /* lvalue */ XVec2 const yy, gg, tt; - XVec2 yz, gb, tp; - XVec2 yw, ga, tq; - XVec2 zx, br, ps; - XVec2 zy, bg, pt; + XVec2 const yz, gb, tp; /* lvalue */ + XVec2 const yw, ga, tq; /* lvalue */ + XVec2 const zx, br, ps; /* lvalue */ + XVec2 const zy, bg, pt; /* lvalue */ XVec2 const zz, bb, pp; - XVec2 zw, ba, pq; - XVec2 wx, ar, qs; - XVec2 wy, ag, qt; - XVec2 wz, ab, qp; + XVec2 const zw, ba, pq; /* lvalue */ + XVec2 const wx, ar, qs; /* lvalue */ + XVec2 const wy, ag, qt; /* lvalue */ + XVec2 const wz, ab, qp; /* lvalue */ XVec2 const ww, aa, qq; XVec3 const xxx, rrr, sss; @@ -461,58 +461,58 @@ template struct Vec4 XVec3 const xxw, rra, ssq; XVec3 const xyx, rgr, sts; XVec3 const xyy, rgg, stt; - XVec3 xyz, rgb, stp; - XVec3 xyw, rga, stq; + XVec3 const xyz, rgb, stp; /* lvalue */ + XVec3 const xyw, rga, stq; /* lvalue */ XVec3 const xzx, rbr, sps; - XVec3 xzy, rbg, spt; + XVec3 const xzy, rbg, spt; /* lvalue */ XVec3 const xzz, rbb, spp; - XVec3 xzw, rba, spq; + XVec3 const xzw, rba, spq; /* lvalue */ XVec3 const xwx, rar, sqs; - XVec3 xwy, rag, sqt; - XVec3 xwz, rab, sqp; + XVec3 const xwy, rag, sqt; /* lvalue */ + XVec3 const xwz, rab, sqp; /* lvalue */ XVec3 const xww, raa, sqq; XVec3 const yxx, grr, tss; XVec3 const yxy, grg, tst; - XVec3 yxz, grb, tsp; - XVec3 yxw, gra, tsq; + XVec3 const yxz, grb, tsp; /* lvalue */ + XVec3 const yxw, gra, tsq; /* lvalue */ XVec3 const yyx, ggr, tts; XVec3 const yyy, ggg, ttt; XVec3 const yyz, ggb, ttp; XVec3 const yyw, gga, ttq; - XVec3 yzx, gbr, tps; + XVec3 const yzx, gbr, tps; /* lvalue */ XVec3 const yzy, gbg, tpt; XVec3 const yzz, gbb, tpp; - XVec3 yzw, gba, tpq; - XVec3 ywx, gar, tqs; + XVec3 const yzw, gba, tpq; /* lvalue */ + XVec3 const ywx, gar, tqs; /* lvalue */ XVec3 const ywy, gag, tqt; - XVec3 ywz, gab, tqp; + XVec3 const ywz, gab, tqp; /* lvalue */ XVec3 const yww, gaa, tqq; XVec3 const zxx, brr, pss; - XVec3 zxy, brg, pst; + XVec3 const zxy, brg, pst; /* lvalue */ XVec3 const zxz, brb, psp; - XVec3 zxw, bra, psq; - XVec3 zyx, bgr, pts; + XVec3 const zxw, bra, psq; /* lvalue */ + XVec3 const zyx, bgr, pts; /* lvalue */ XVec3 const zyy, bgg, ptt; XVec3 const zyz, bgb, ptp; - XVec3 zyw, bga, ptq; + XVec3 const zyw, bga, ptq; /* lvalue */ XVec3 const zzx, bbr, pps; XVec3 const zzy, bbg, ppt; XVec3 const zzz, bbb, ppp; XVec3 const zzw, bba, ppq; - XVec3 zwx, bar, pqs; - XVec3 zwy, bag, pqt; + XVec3 const zwx, bar, pqs; /* lvalue */ + XVec3 const zwy, bag, pqt; /* lvalue */ XVec3 const zwz, bab, pqp; XVec3 const zww, baa, pqq; XVec3 const wxx, arr, qss; - XVec3 wxy, arg, qst; - XVec3 wxz, arb, qsp; + XVec3 const wxy, arg, qst; /* lvalue */ + XVec3 const wxz, arb, qsp; /* lvalue */ XVec3 const wxw, ara, qsq; - XVec3 wyx, agr, qts; + XVec3 const wyx, agr, qts; /* lvalue */ XVec3 const wyy, agg, qtt; - XVec3 wyz, agb, qtp; + XVec3 const wyz, agb, qtp; /* lvalue */ XVec3 const wyw, aga, qtq; - XVec3 wzx, abr, qps; - XVec3 wzy, abg, qpt; + XVec3 const wzx, abr, qps; /* lvalue */ + XVec3 const wzy, abg, qpt; /* lvalue */ XVec3 const wzz, abb, qpp; XVec3 const wzw, aba, qpq; XVec3 const wwx, aar, qqs; @@ -547,10 +547,10 @@ template struct Vec4 XVec4 const xyzx, rgbr, stps; XVec4 const xyzy, rgbg, stpt; XVec4 const xyzz, rgbb, stpp; - XVec4 xyzw, rgba, stpq; + XVec4 const xyzw, rgba, stpq; /* lvalue */ XVec4 const xywx, rgar, stqs; XVec4 const xywy, rgag, stqt; - XVec4 xywz, rgab, stqp; + XVec4 const xywz, rgab, stqp; /* lvalue */ XVec4 const xyww, rgaa, stqq; XVec4 const xzxx, rbrr, spss; XVec4 const xzxy, rbrg, spst; @@ -559,13 +559,13 @@ template struct Vec4 XVec4 const xzyx, rbgr, spts; XVec4 const xzyy, rbgg, sptt; XVec4 const xzyz, rbgb, sptp; - XVec4 xzyw, rbga, sptq; + XVec4 const xzyw, rbga, sptq; /* lvalue */ XVec4 const xzzx, rbbr, spps; XVec4 const xzzy, rbbg, sppt; XVec4 const xzzz, rbbb, sppp; XVec4 const xzzw, rbba, sppq; XVec4 const xzwx, rbar, spqs; - XVec4 xzwy, rbag, spqt; + XVec4 const xzwy, rbag, spqt; /* lvalue */ XVec4 const xzwz, rbab, spqp; XVec4 const xzww, rbaa, spqq; XVec4 const xwxx, rarr, sqss; @@ -574,10 +574,10 @@ template struct Vec4 XVec4 const xwxw, rara, sqsq; XVec4 const xwyx, ragr, sqts; XVec4 const xwyy, ragg, sqtt; - XVec4 xwyz, ragb, sqtp; + XVec4 const xwyz, ragb, sqtp; /* lvalue */ XVec4 const xwyw, raga, sqtq; XVec4 const xwzx, rabr, sqps; - XVec4 xwzy, rabg, sqpt; + XVec4 const xwzy, rabg, sqpt; /* lvalue */ XVec4 const xwzz, rabb, sqpp; XVec4 const xwzw, raba, sqpq; XVec4 const xwwx, raar, sqqs; @@ -595,10 +595,10 @@ template struct Vec4 XVec4 const yxzx, grbr, tsps; XVec4 const yxzy, grbg, tspt; XVec4 const yxzz, grbb, tspp; - XVec4 yxzw, grba, tspq; + XVec4 const yxzw, grba, tspq; /* lvalue */ XVec4 const yxwx, grar, tsqs; XVec4 const yxwy, grag, tsqt; - XVec4 yxwz, grab, tsqp; + XVec4 const yxwz, grab, tsqp; /* lvalue */ XVec4 const yxww, graa, tsqq; XVec4 const yyxx, ggrr, ttss; XVec4 const yyxy, ggrg, ttst; @@ -619,7 +619,7 @@ template struct Vec4 XVec4 const yzxx, gbrr, tpss; XVec4 const yzxy, gbrg, tpst; XVec4 const yzxz, gbrb, tpsp; - XVec4 yzxw, gbra, tpsq; + XVec4 const yzxw, gbra, tpsq; /* lvalue */ XVec4 const yzyx, gbgr, tpts; XVec4 const yzyy, gbgg, tptt; XVec4 const yzyz, gbgb, tptp; @@ -628,19 +628,19 @@ template struct Vec4 XVec4 const yzzy, gbbg, tppt; XVec4 const yzzz, gbbb, tppp; XVec4 const yzzw, gbba, tppq; - XVec4 yzwx, gbar, tpqs; + XVec4 const yzwx, gbar, tpqs; /* lvalue */ XVec4 const yzwy, gbag, tpqt; XVec4 const yzwz, gbab, tpqp; XVec4 const yzww, gbaa, tpqq; XVec4 const ywxx, garr, tqss; XVec4 const ywxy, garg, tqst; - XVec4 ywxz, garb, tqsp; + XVec4 const ywxz, garb, tqsp; /* lvalue */ XVec4 const ywxw, gara, tqsq; XVec4 const ywyx, gagr, tqts; XVec4 const ywyy, gagg, tqtt; XVec4 const ywyz, gagb, tqtp; XVec4 const ywyw, gaga, tqtq; - XVec4 ywzx, gabr, tqps; + XVec4 const ywzx, gabr, tqps; /* lvalue */ XVec4 const ywzy, gabg, tqpt; XVec4 const ywzz, gabb, tqpp; XVec4 const ywzw, gaba, tqpq; @@ -655,19 +655,19 @@ template struct Vec4 XVec4 const zxyx, brgr, psts; XVec4 const zxyy, brgg, pstt; XVec4 const zxyz, brgb, pstp; - XVec4 zxyw, brga, pstq; + XVec4 const zxyw, brga, pstq; /* lvalue */ XVec4 const zxzx, brbr, psps; XVec4 const zxzy, brbg, pspt; XVec4 const zxzz, brbb, pspp; XVec4 const zxzw, brba, pspq; XVec4 const zxwx, brar, psqs; - XVec4 zxwy, brag, psqt; + XVec4 const zxwy, brag, psqt; /* lvalue */ XVec4 const zxwz, brab, psqp; XVec4 const zxww, braa, psqq; XVec4 const zyxx, bgrr, ptss; XVec4 const zyxy, bgrg, ptst; XVec4 const zyxz, bgrb, ptsp; - XVec4 zyxw, bgra, ptsq; + XVec4 const zyxw, bgra, ptsq; /* lvalue */ XVec4 const zyyx, bggr, ptts; XVec4 const zyyy, bggg, pttt; XVec4 const zyyz, bggb, pttp; @@ -676,7 +676,7 @@ template struct Vec4 XVec4 const zyzy, bgbg, ptpt; XVec4 const zyzz, bgbb, ptpp; XVec4 const zyzw, bgba, ptpq; - XVec4 zywx, bgar, ptqs; + XVec4 const zywx, bgar, ptqs; /* lvalue */ XVec4 const zywy, bgag, ptqt; XVec4 const zywz, bgab, ptqp; XVec4 const zyww, bgaa, ptqq; @@ -697,10 +697,10 @@ template struct Vec4 XVec4 const zzwz, bbab, ppqp; XVec4 const zzww, bbaa, ppqq; XVec4 const zwxx, barr, pqss; - XVec4 zwxy, barg, pqst; + XVec4 const zwxy, barg, pqst; /* lvalue */ XVec4 const zwxz, barb, pqsp; XVec4 const zwxw, bara, pqsq; - XVec4 zwyx, bagr, pqts; + XVec4 const zwyx, bagr, pqts; /* lvalue */ XVec4 const zwyy, bagg, pqtt; XVec4 const zwyz, bagb, pqtp; XVec4 const zwyw, baga, pqtq; @@ -718,10 +718,10 @@ template struct Vec4 XVec4 const wxxw, arra, qssq; XVec4 const wxyx, argr, qsts; XVec4 const wxyy, argg, qstt; - XVec4 wxyz, argb, qstp; + XVec4 const wxyz, argb, qstp; /* lvalue */ XVec4 const wxyw, arga, qstq; XVec4 const wxzx, arbr, qsps; - XVec4 wxzy, arbg, qspt; + XVec4 const wxzy, arbg, qspt; /* lvalue */ XVec4 const wxzz, arbb, qspp; XVec4 const wxzw, arba, qspq; XVec4 const wxwx, arar, qsqs; @@ -730,13 +730,13 @@ template struct Vec4 XVec4 const wxww, araa, qsqq; XVec4 const wyxx, agrr, qtss; XVec4 const wyxy, agrg, qtst; - XVec4 wyxz, agrb, qtsp; + XVec4 const wyxz, agrb, qtsp; /* lvalue */ XVec4 const wyxw, agra, qtsq; XVec4 const wyyx, aggr, qtts; XVec4 const wyyy, aggg, qttt; XVec4 const wyyz, aggb, qttp; XVec4 const wyyw, agga, qttq; - XVec4 wyzx, agbr, qtps; + XVec4 const wyzx, agbr, qtps; /* lvalue */ XVec4 const wyzy, agbg, qtpt; XVec4 const wyzz, agbb, qtpp; XVec4 const wyzw, agba, qtpq; @@ -745,10 +745,10 @@ template struct Vec4 XVec4 const wywz, agab, qtqp; XVec4 const wyww, agaa, qtqq; XVec4 const wzxx, abrr, qpss; - XVec4 wzxy, abrg, qpst; + XVec4 const wzxy, abrg, qpst; /* lvalue */ XVec4 const wzxz, abrb, qpsp; XVec4 const wzxw, abra, qpsq; - XVec4 wzyx, abgr, qpts; + XVec4 const wzyx, abgr, qpts; /* lvalue */ XVec4 const wzyy, abgg, qptt; XVec4 const wzyz, abgb, qptp; XVec4 const wzyw, abga, qptq; @@ -1009,6 +1009,10 @@ DECLARE_GLOBAL_TYPED_OPS(Vec4) /* * Magic vector swizzling (part 2/2) + * Unfortunately these assignment operators cannot be used for now, because + * we would also need to override the default copy assignment operator, and + * in C++98 unions cannot contain such objects. This is why all the swizzling + * magic objects are marked 'const' even those that could be lvalues. */ template