10 template<
class Real,
int Options>
16 namespace vec {
namespace priv
18 template<
class Real, szt Align>
26 namespace matrix {
namespace priv
28 template<
class R,
int O>
30 template<
class R,
int O>
33 template<
class R,
int O>
35 template<
class R,
int O>
38 template<
class R,
int O>
43 template<
class Real,
int Options>
66 explicit Vec(
const Vec3& v) { x = v.x; y = v.y; }
67 explicit Vec(
const Vec4& v) { x = v.x; y = v.y; }
92 static const Vec axis[2];
97 VecSwizCon2
xx()
const {
return VecSwizCon2(x,x); }
98 VecSwizCon3
xxx()
const {
return VecSwizCon3(x,x,x); }
99 VecSwizCon4
xxxx()
const {
return VecSwizCon4(x,x,x,x); }
100 VecSwizCon4
xxxy()
const {
return VecSwizCon4(x,x,x,y); }
101 VecSwizCon3
xxy()
const {
return VecSwizCon3(x,x,y); }
102 VecSwizCon4
xxyx()
const {
return VecSwizCon4(x,x,y,x); }
103 VecSwizCon4
xxyy()
const {
return VecSwizCon4(x,x,y,y); }
104 VecSwizCon2
xy()
const {
return VecSwizCon2(x,y); }
105 VecSwizCon3
xyx()
const {
return VecSwizCon3(x,y,x); }
106 VecSwizCon4
xyxx()
const {
return VecSwizCon4(x,y,x,x); }
107 VecSwizCon4
xyxy()
const {
return VecSwizCon4(x,y,x,y); }
108 VecSwizCon3
xyy()
const {
return VecSwizCon3(x,y,y); }
109 VecSwizCon4
xyyx()
const {
return VecSwizCon4(x,y,y,x); }
110 VecSwizCon4
xyyy()
const {
return VecSwizCon4(x,y,y,y); }
111 VecSwizCon2
yx()
const {
return VecSwizCon2(y,x); }
112 VecSwizCon3
yxx()
const {
return VecSwizCon3(y,x,x); }
113 VecSwizCon4
yxxx()
const {
return VecSwizCon4(y,x,x,x); }
114 VecSwizCon4
yxxy()
const {
return VecSwizCon4(y,x,x,y); }
115 VecSwizCon3
yxy()
const {
return VecSwizCon3(y,x,y); }
116 VecSwizCon4
yxyx()
const {
return VecSwizCon4(y,x,y,x); }
117 VecSwizCon4
yxyy()
const {
return VecSwizCon4(y,x,y,y); }
118 VecSwizCon2
yy()
const {
return VecSwizCon2(y,y); }
119 VecSwizCon3
yyx()
const {
return VecSwizCon3(y,y,x); }
120 VecSwizCon4
yyxx()
const {
return VecSwizCon4(y,y,x,x); }
121 VecSwizCon4
yyxy()
const {
return VecSwizCon4(y,y,x,y); }
122 VecSwizCon3
yyy()
const {
return VecSwizCon3(y,y,y); }
123 VecSwizCon4
yyyx()
const {
return VecSwizCon4(y,y,y,x); }
124 VecSwizCon4
yyyy()
const {
return VecSwizCon4(y,y,y,y); }
129 VecSwizRef2
xy() {
return VecSwizRef2(x,y); }
130 VecSwizRef2
yx() {
return VecSwizRef2(y,x); }
134 template<
class R,
int O>
const Vec<2,R,O> Vec<2,R,O>::zero (0);
135 template<
class R,
int O>
const Vec<2,R,O> Vec<2,R,O>::one (1);
136 template<
class R,
int O>
const Vec<2,R,O> Vec<2,R,O>::axisX (1, 0);
137 template<
class R,
int O>
const Vec<2,R,O> Vec<2,R,O>::axisY (0, 1);
138 template<
class R,
int O>
const Vec<2,R,O> Vec<2,R,O>::axis[2] = { axisX, axisY };
141 template<
class R,
int Opt>
144 struct priv::map_impl<Vec<2,R,Opt>, Vec<2,R,Opt>>
146 template<
class T,
class O,
class Func>
147 static O&& func(T&& v, O&& o, Func&& f) { o.x = f(v.x); o.y = f(v.y);
return forward<O>(o); }
150 template<
class R,
int Opt>
151 struct priv::map_impl<Vec<2,R,Opt>, Vec<2,R,Opt>, Vec<2,R,Opt>>
153 template<
class T,
class T2,
class O,
class Func>
154 static O&& func(T&& v, T2&& rhs, O&& o, Func&& f) { o.x = f(v.x,rhs.x); o.y = f(v.y,rhs.y);
return forward<O>(o); }
157 template<
class R,
int O,
class Accum_>
158 struct priv::reduce_impl<Vec<2,R,O>, Accum_>
160 template<
class T,
class Accum,
class Func>
161 static Accum_ func(T&& v, Accum&& initVal, Func&& f) {
return f(f(forward<Accum>(initVal), v.x), v.y); }
164 template<
class R,
int O,
class Accum_>
165 struct priv::reduce_impl<Vec<2,R,O>, Accum_, Vec<2,R,O>>
167 template<
class T,
class T2,
class Accum,
class Func>
168 static Accum_ func(T&& v, T2&& rhs, Accum&& initVal, Func&& f) {
return f(f(forward<Accum>(initVal), v.x, rhs.x), v.y, rhs.y); }
173 template<
class Real,
int Options>
182 template<
class Real,
int Options>
188 using Super::operator=;
213 #include "Honey/Math/Alge/Vec/platform/Vec2.h"
MatrixS & fromScalar(Real f)
Initialize with scalar in every element.
Definition: Base.h:72
Vec()
No init.
Definition: Vec.h:39
Automatic (stack-compatible) vector storage that allows direct access to dimension fields...
Definition: Storage.h:13
VecBase & operator=(const MatrixBase< T > &rhs)
Assign to row or column vector of any dimension. Asserts that if this vector has a fixed dimension th...
Definition: Base.h:35
Vec(const Vec3 &v)
Construct from vector ignoring the extra components.
Definition: Vec2.h:66
void storageFillZero(StorageBlock< T > &store)
Fill block storage with zeros.
Definition: Block.h:136
VecSwizCon4 xxyy() const
Definition: Vec2.h:103
N-dimensional vector traits.
Definition: Vec.h:14
Real dot(const Vec &v) const
Definition: Vec2.h:78
Vec(Real scalar)
Construct uniform vector.
Definition: Vec2.h:64
Vec Vec2
Definition: Vec2.h:48
VecSwizCon3 xyx() const
Definition: Vec2.h:105
Real dot(const VecBase< T > &v) const
Vector dot product.
Definition: Base.h:91
VecSwizCon4 xxyx() const
Definition: Vec2.h:102
VecSwizCon< 4, Real, Options > VecSwizCon4
Definition: Vec2.h:53
Vec< 2, Float > Vec2_f
Definition: Vec2.h:203
VecSwizCon3 xyy() const
Definition: Vec2.h:108
VecSwizCon4 xxxy() const
Definition: Vec2.h:100
VecSwizRef2 xy()
Definition: Vec2.h:129
bool storageEqual(const StorageBlock< T > &lhs, const StorageBlock< T2 > &rhs)
Test between block storages.
Definition: Block.h:157
3D const swizzle vector
Definition: Vec3.h:326
VecSwizCon3 yxx() const
Definition: Vec2.h:112
VecSwizCon4 yxxy() const
Definition: Vec2.h:114
Vector for const swizzle operators.
Definition: Swiz.h:10
VecSwizCon2 yy() const
Definition: Vec2.h:118
VecSwizRef2 yx()
Definition: Vec2.h:130
Vec< 2 > Vec2
2D column vector types
Definition: Vec2.h:202
VecSwizCon4 yyyy() const
Definition: Vec2.h:124
2D const swizzle vector
Definition: Vec2.h:175
Real x
Definition: Vec2.h:21
VecSwizRef(Real &x, Real &y)
Definition: Vec2.h:192
VecSwizRef & commit()
Definition: Vec2.h:194
VecSwizCon3 yxy() const
Definition: Vec2.h:115
VecSwizCon2 xy() const
Definition: Vec2.h:104
VecSwizCon4 xyxx() const
Definition: Vec2.h:106
Vec normal() const
Get the left-perpendicular vector.
Definition: Vec2.h:85
VecSwizCon4 yxyy() const
Definition: Vec2.h:117
VecSwizRefBase< VecSwizRef< 2, Real, Options > > Super
Definition: Vec2.h:187
VecSwizCon3 yyx() const
Definition: Vec2.h:119
VecSwizCon< 2, Real, Options > VecSwizCon2
Definition: Vec2.h:51
Vec & operator=(const MatrixBase< T > &rhs)
Definition: Vec2.h:73
Real Real
Definition: Vec.h:17
N-dimensional vector.
Definition: Traits.h:12
VecSwizCon4 xxxx() const
Definition: Vec2.h:99
Vec< 2, Double, matrix::Option::vecRow > VecRow2_d
Definition: Vec2.h:209
VecSwizCon(Real x, Real y)
Definition: Vec2.h:178
VecSwizCon4 yyxy() const
Definition: Vec2.h:121
VecSwizCon4 yyxx() const
Definition: Vec2.h:120
vec::priv::StorageFields< Vec< 2, Real, Options > > Storage
Definition: Vec2.h:13
4D const swizzle vector
Definition: Vec4.h:641
float Real
Real number type. See Real_ for real number operations and constants.
Definition: Real.h:21
Real cross(const Vec &v) const
Vector cross product.
Definition: Vec2.h:82
Real lengthSqr() const
Definition: Vec2.h:77
Vec< 3, Real > Vec3
Definition: Vec2.h:49
Vec()
No init.
Definition: Vec2.h:61
Vec(Real x, Real y)
Definition: Vec2.h:62
static const Vec axisY
Definition: Vec2.h:91
Vector base class.
Definition: Base.h:11
Vec & operator=(const MatrixBase< T > &rhs)
Assign to row or column vector of any dimension. Asserts that if this vector has a fixed dimension th...
Definition: Vec.h:56
void storageFill(StorageBlock< T > &store, typename StorageBlock< T >::Real f)
Fill block storage with scalar.
Definition: Block.h:128
Vec< 2, Real, matrix::Option::vecRow > VecRow2
2D row vector types
Definition: Vec2.h:207
VecSwizCon< 3, Real, Options > VecSwizCon3
Definition: Vec2.h:52
VecSwizCon3 xxy() const
Definition: Vec2.h:101
Vec(const MatrixBase< T > &rhs)
Construct from vector of same dimension.
Definition: Vec2.h:70
VecSwizCon4 xyyy() const
Definition: Vec2.h:110
VecSwizCon4 xyyx() const
Definition: Vec2.h:109
VecSwizCon4 yxxx() const
Definition: Vec2.h:113
Vec< 4, Real > Vec4
Definition: Vec2.h:50
VecSwizCon3 yyy() const
Definition: Vec2.h:122
Vec< 2, Float, matrix::Option::vecRow > VecRow2_f
Definition: Vec2.h:208
VecSwizCon2 xx() const
Definition: Vec2.h:97
Real y
Definition: Vec2.h:22
VecSwizCon4 yyyx() const
Definition: Vec2.h:123
void storageCopy(const StorageBlock< Src > &src, StorageBlock< Dst > &dst)
Copy between block and dense storages.
Definition: Block.h:84
VecSwizCon2 yx() const
Definition: Vec2.h:111
Matrix base class.
Definition: Base.h:17
Vec(const Vec4 &v)
Definition: Vec2.h:67
Vec< 2, Double > Vec2_d
Definition: Vec2.h:204
VecSwizRef< 2, Real, Options > VecSwizRef2
Definition: Vec2.h:54
VecSwizCon4 yxyx() const
Definition: Vec2.h:116
Vector reference holder for mutable swizzle operators.
Definition: Swiz.h:54
Global Honeycomb namespace.
VecSwizCon4 xyxy() const
Definition: Vec2.h:107
VecSwizCon3 xxx() const
Definition: Vec2.h:98
static const Vec zero
Definition: Vec2.h:88
2D mutable swizzle vector
Definition: Vec2.h:183
static const Vec one
Definition: Vec2.h:89
static const Vec axisX
Definition: Vec2.h:90