// Copyright 2022 The SwiftShader Authors. All Rights Reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. namespace rr { template struct Scalar; template struct XYZW; template class RValue; template class Swizzle2 { friend Vector4; public: operator RValue() const; private: Vector4 *parent; }; template class Swizzle4 { public: operator RValue() const; private: Vector4 *parent; }; template class SwizzleMask4 { friend XYZW; public: operator RValue() const; RValue operator=(RValue rhs); RValue operator=(RValue::Type> rhs); private: Vector4 *parent; }; template class SwizzleMask1 { public: operator RValue::Type>() const; operator RValue() const; RValue operator=(float x); RValue operator=(RValue rhs); RValue operator=(RValue::Type> rhs); private: Vector4 *parent; }; template RValue::Type> operator+(RValue::Type> lhs, SwizzleMask1 rhs) { return lhs + RValue::Type>(rhs); } template RValue::Type> operator+(SwizzleMask1 lhs, RValue::Type> rhs) { return RValue::Type>(lhs) + rhs; } template RValue::Type> operator-(RValue::Type> lhs, SwizzleMask1 rhs) { return lhs - RValue::Type>(rhs); } template RValue::Type> operator-(SwizzleMask1 lhs, RValue::Type> rhs) { return RValue::Type>(lhs) - rhs; } template class SwizzleMask2 { friend Vector4; public: operator RValue() const; RValue operator=(RValue rhs); private: Vector4 *parent; }; template struct XYZW { friend Vector4; private: XYZW(Vector4 *parent) { xyzw.parent = parent; } public: union { SwizzleMask1 x; SwizzleMask1 y; SwizzleMask1 z; SwizzleMask1 w; Swizzle2 xx; Swizzle2 yx; Swizzle2 zx; Swizzle2 wx; SwizzleMask2 xy; Swizzle2 yy; Swizzle2 zy; Swizzle2 wy; SwizzleMask2 xz; SwizzleMask2 yz; Swizzle2 zz; Swizzle2 wz; SwizzleMask2 xw; SwizzleMask2 yw; SwizzleMask2 zw; Swizzle2 ww; Swizzle4 xxx; Swizzle4 yxx; Swizzle4 zxx; Swizzle4 wxx; Swizzle4 xyx; Swizzle4 yyx; Swizzle4 zyx; Swizzle4 wyx; Swizzle4 xzx; Swizzle4 yzx; Swizzle4 zzx; Swizzle4 wzx; Swizzle4 xwx; Swizzle4 ywx; Swizzle4 zwx; Swizzle4 wwx; Swizzle4 xxy; Swizzle4 yxy; Swizzle4 zxy; Swizzle4 wxy; Swizzle4 xyy; Swizzle4 yyy; Swizzle4 zyy; Swizzle4 wyy; Swizzle4 xzy; Swizzle4 yzy; Swizzle4 zzy; Swizzle4 wzy; Swizzle4 xwy; Swizzle4 ywy; Swizzle4 zwy; Swizzle4 wwy; Swizzle4 xxz; Swizzle4 yxz; Swizzle4 zxz; Swizzle4 wxz; SwizzleMask4 xyz; Swizzle4 yyz; Swizzle4 zyz; Swizzle4 wyz; Swizzle4 xzz; Swizzle4 yzz; Swizzle4 zzz; Swizzle4 wzz; Swizzle4 xwz; Swizzle4 ywz; Swizzle4 zwz; Swizzle4 wwz; Swizzle4 xxw; Swizzle4 yxw; Swizzle4 zxw; Swizzle4 wxw; SwizzleMask4 xyw; Swizzle4 yyw; Swizzle4 zyw; Swizzle4 wyw; SwizzleMask4 xzw; SwizzleMask4 yzw; Swizzle4 zzw; Swizzle4 wzw; Swizzle4 xww; Swizzle4 yww; Swizzle4 zww; Swizzle4 www; Swizzle4 xxxx; Swizzle4 yxxx; Swizzle4 zxxx; Swizzle4 wxxx; Swizzle4 xyxx; Swizzle4 yyxx; Swizzle4 zyxx; Swizzle4 wyxx; Swizzle4 xzxx; Swizzle4 yzxx; Swizzle4 zzxx; Swizzle4 wzxx; Swizzle4 xwxx; Swizzle4 ywxx; Swizzle4 zwxx; Swizzle4 wwxx; Swizzle4 xxyx; Swizzle4 yxyx; Swizzle4 zxyx; Swizzle4 wxyx; Swizzle4 xyyx; Swizzle4 yyyx; Swizzle4 zyyx; Swizzle4 wyyx; Swizzle4 xzyx; Swizzle4 yzyx; Swizzle4 zzyx; Swizzle4 wzyx; Swizzle4 xwyx; Swizzle4 ywyx; Swizzle4 zwyx; Swizzle4 wwyx; Swizzle4 xxzx; Swizzle4 yxzx; Swizzle4 zxzx; Swizzle4 wxzx; Swizzle4 xyzx; Swizzle4 yyzx; Swizzle4 zyzx; Swizzle4 wyzx; Swizzle4 xzzx; Swizzle4 yzzx; Swizzle4 zzzx; Swizzle4 wzzx; Swizzle4 xwzx; Swizzle4 ywzx; Swizzle4 zwzx; Swizzle4 wwzx; Swizzle4 xxwx; Swizzle4 yxwx; Swizzle4 zxwx; Swizzle4 wxwx; Swizzle4 xywx; Swizzle4 yywx; Swizzle4 zywx; Swizzle4 wywx; Swizzle4 xzwx; Swizzle4 yzwx; Swizzle4 zzwx; Swizzle4 wzwx; Swizzle4 xwwx; Swizzle4 ywwx; Swizzle4 zwwx; Swizzle4 wwwx; Swizzle4 xxxy; Swizzle4 yxxy; Swizzle4 zxxy; Swizzle4 wxxy; Swizzle4 xyxy; Swizzle4 yyxy; Swizzle4 zyxy; Swizzle4 wyxy; Swizzle4 xzxy; Swizzle4 yzxy; Swizzle4 zzxy; Swizzle4 wzxy; Swizzle4 xwxy; Swizzle4 ywxy; Swizzle4 zwxy; Swizzle4 wwxy; Swizzle4 xxyy; Swizzle4 yxyy; Swizzle4 zxyy; Swizzle4 wxyy; Swizzle4 xyyy; Swizzle4 yyyy; Swizzle4 zyyy; Swizzle4 wyyy; Swizzle4 xzyy; Swizzle4 yzyy; Swizzle4 zzyy; Swizzle4 wzyy; Swizzle4 xwyy; Swizzle4 ywyy; Swizzle4 zwyy; Swizzle4 wwyy; Swizzle4 xxzy; Swizzle4 yxzy; Swizzle4 zxzy; Swizzle4 wxzy; Swizzle4 xyzy; Swizzle4 yyzy; Swizzle4 zyzy; Swizzle4 wyzy; Swizzle4 xzzy; Swizzle4 yzzy; Swizzle4 zzzy; Swizzle4 wzzy; Swizzle4 xwzy; Swizzle4 ywzy; Swizzle4 zwzy; Swizzle4 wwzy; Swizzle4 xxwy; Swizzle4 yxwy; Swizzle4 zxwy; Swizzle4 wxwy; Swizzle4 xywy; Swizzle4 yywy; Swizzle4 zywy; Swizzle4 wywy; Swizzle4 xzwy; Swizzle4 yzwy; Swizzle4 zzwy; Swizzle4 wzwy; Swizzle4 xwwy; Swizzle4 ywwy; Swizzle4 zwwy; Swizzle4 wwwy; Swizzle4 xxxz; Swizzle4 yxxz; Swizzle4 zxxz; Swizzle4 wxxz; Swizzle4 xyxz; Swizzle4 yyxz; Swizzle4 zyxz; Swizzle4 wyxz; Swizzle4 xzxz; Swizzle4 yzxz; Swizzle4 zzxz; Swizzle4 wzxz; Swizzle4 xwxz; Swizzle4 ywxz; Swizzle4 zwxz; Swizzle4 wwxz; Swizzle4 xxyz; Swizzle4 yxyz; Swizzle4 zxyz; Swizzle4 wxyz; Swizzle4 xyyz; Swizzle4 yyyz; Swizzle4 zyyz; Swizzle4 wyyz; Swizzle4 xzyz; Swizzle4 yzyz; Swizzle4 zzyz; Swizzle4 wzyz; Swizzle4 xwyz; Swizzle4 ywyz; Swizzle4 zwyz; Swizzle4 wwyz; Swizzle4 xxzz; Swizzle4 yxzz; Swizzle4 zxzz; Swizzle4 wxzz; Swizzle4 xyzz; Swizzle4 yyzz; Swizzle4 zyzz; Swizzle4 wyzz; Swizzle4 xzzz; Swizzle4 yzzz; Swizzle4 zzzz; Swizzle4 wzzz; Swizzle4 xwzz; Swizzle4 ywzz; Swizzle4 zwzz; Swizzle4 wwzz; Swizzle4 xxwz; Swizzle4 yxwz; Swizzle4 zxwz; Swizzle4 wxwz; Swizzle4 xywz; Swizzle4 yywz; Swizzle4 zywz; Swizzle4 wywz; Swizzle4 xzwz; Swizzle4 yzwz; Swizzle4 zzwz; Swizzle4 wzwz; Swizzle4 xwwz; Swizzle4 ywwz; Swizzle4 zwwz; Swizzle4 wwwz; Swizzle4 xxxw; Swizzle4 yxxw; Swizzle4 zxxw; Swizzle4 wxxw; Swizzle4 xyxw; Swizzle4 yyxw; Swizzle4 zyxw; Swizzle4 wyxw; Swizzle4 xzxw; Swizzle4 yzxw; Swizzle4 zzxw; Swizzle4 wzxw; Swizzle4 xwxw; Swizzle4 ywxw; Swizzle4 zwxw; Swizzle4 wwxw; Swizzle4 xxyw; Swizzle4 yxyw; Swizzle4 zxyw; Swizzle4 wxyw; Swizzle4 xyyw; Swizzle4 yyyw; Swizzle4 zyyw; Swizzle4 wyyw; Swizzle4 xzyw; Swizzle4 yzyw; Swizzle4 zzyw; Swizzle4 wzyw; Swizzle4 xwyw; Swizzle4 ywyw; Swizzle4 zwyw; Swizzle4 wwyw; Swizzle4 xxzw; Swizzle4 yxzw; Swizzle4 zxzw; Swizzle4 wxzw; SwizzleMask4 xyzw; Swizzle4 yyzw; Swizzle4 zyzw; Swizzle4 wyzw; Swizzle4 xzzw; Swizzle4 yzzw; Swizzle4 zzzw; Swizzle4 wzzw; Swizzle4 xwzw; Swizzle4 ywzw; Swizzle4 zwzw; Swizzle4 wwzw; Swizzle4 xxww; Swizzle4 yxww; Swizzle4 zxww; Swizzle4 wxww; Swizzle4 xyww; Swizzle4 yyww; Swizzle4 zyww; Swizzle4 wyww; Swizzle4 xzww; Swizzle4 yzww; Swizzle4 zzww; Swizzle4 wzww; Swizzle4 xwww; Swizzle4 ywww; Swizzle4 zwww; Swizzle4 wwww; }; }; } // namespace rr