6 #include "qualifier.hpp"
7 #if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR
8 # include "_swizzle.hpp"
9 #elif GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_FUNCTION
10 # include "_swizzle_func.hpp"
16 template<
typename T, qualifier Q>
22 typedef vec<2, T, Q> type;
23 typedef vec<2, bool, Q> bool_type;
31 # if GLM_SILENT_WARNINGS == GLM_ENABLE
32 # if GLM_COMPILER & GLM_COMPILER_GCC
33 # pragma GCC diagnostic push
34 # pragma GCC diagnostic ignored "-Wpedantic"
35 # elif GLM_COMPILER & GLM_COMPILER_CLANG
36 # pragma clang diagnostic push
37 # pragma clang diagnostic ignored "-Wgnu-anonymous-struct"
38 # pragma clang diagnostic ignored "-Wnested-anon-types"
39 # elif GLM_COMPILER & GLM_COMPILER_VC
40 # pragma warning(push)
41 # pragma warning(disable: 4201) // nonstandard extension used : nameless struct/union
45 # if GLM_CONFIG_XYZW_ONLY
47 # if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_FUNCTION
48 GLM_SWIZZLE_GEN_VEC_FROM_VEC2_COMP(T, Q, x, y)
49 # endif//GLM_CONFIG_SWIZZLE
50 # elif GLM_CONFIG_ANONYMOUS_STRUCT == GLM_ENABLE
57 typename detail::storage<2, T, detail::is_aligned<Q>::value>::type data;
59 # if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR
60 GLM_SWIZZLE2_2_MEMBERS(T, Q, x, y)
61 GLM_SWIZZLE2_2_MEMBERS(T, Q, r, g)
62 GLM_SWIZZLE2_2_MEMBERS(T, Q, s, t)
63 GLM_SWIZZLE2_3_MEMBERS(T, Q, x, y)
64 GLM_SWIZZLE2_3_MEMBERS(T, Q, r, g)
65 GLM_SWIZZLE2_3_MEMBERS(T, Q, s, t)
66 GLM_SWIZZLE2_4_MEMBERS(T, Q, x, y)
67 GLM_SWIZZLE2_4_MEMBERS(T, Q, r, g)
68 GLM_SWIZZLE2_4_MEMBERS(T, Q, s, t)
75 # if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_FUNCTION
76 GLM_SWIZZLE_GEN_VEC_FROM_VEC2(T, Q)
77 # endif//GLM_CONFIG_SWIZZLE
80 # if GLM_SILENT_WARNINGS == GLM_ENABLE
81 # if GLM_COMPILER & GLM_COMPILER_CLANG
82 # pragma clang diagnostic pop
83 # elif GLM_COMPILER & GLM_COMPILER_GCC
84 # pragma GCC diagnostic pop
85 # elif GLM_COMPILER & GLM_COMPILER_VC
93 typedef length_t length_type;
94 GLM_FUNC_DECL
static GLM_CONSTEXPR length_type
length(){
return 2;}
96 GLM_FUNC_DECL GLM_CONSTEXPR T& operator[](length_type i);
97 GLM_FUNC_DECL GLM_CONSTEXPR T
const& operator[](length_type i)
const;
101 GLM_DEFAULTED_DEFAULT_CTOR_DECL GLM_CONSTEXPR vec() GLM_DEFAULT_CTOR;
102 GLM_DEFAULTED_FUNC_DECL GLM_CONSTEXPR vec(vec const& v) GLM_DEFAULT;
103 template<qualifier P>
104 GLM_CTOR_DECL vec(vec<2, T, P> const& v);
108 GLM_CTOR_DECL explicit vec(T scalar);
109 GLM_CTOR_DECL vec(T x, T y);
113 template<typename U, qualifier P>
114 GLM_CTOR_DECL explicit vec(vec<1, U, P> const& v);
117 template<typename A, typename B>
118 GLM_CTOR_DECL vec(A x, B y);
119 template<typename A, typename B>
120 GLM_CTOR_DECL vec(vec<1, A, Q> const& x, B y);
121 template<typename A, typename B>
122 GLM_CTOR_DECL vec(A x, vec<1, B, Q> const& y);
123 template<typename A, typename B>
124 GLM_CTOR_DECL vec(vec<1, A, Q> const& x, vec<1, B, Q> const& y);
129 template<typename U, qualifier P>
130 GLM_CTOR_DECL GLM_EXPLICIT vec(vec<3, U, P> const& v);
132 template<typename U, qualifier P>
133 GLM_CTOR_DECL GLM_EXPLICIT vec(vec<4, U, P> const& v);
136 template<typename U, qualifier P>
137 GLM_CTOR_DECL GLM_EXPLICIT vec(vec<2, U, P> const& v);
140 # if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR
141 template<
int E0,
int E1>
142 GLM_FUNC_DISCARD_DECL vec(detail::_swizzle<2, T, Q, E0, E1,-1,-2>
const& that)
146 # endif//GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR
150 GLM_DEFAULTED_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator=(vec
const& v) GLM_DEFAULT;
153 GLM_FUNC_DISCARD_DECL GLM_CONSTEXPR vec<2, T, Q> & operator=(vec<2, U, Q>
const& v);
155 GLM_FUNC_DISCARD_DECL GLM_CONSTEXPR vec<2, T, Q> & operator+=(U scalar);
157 GLM_FUNC_DISCARD_DECL GLM_CONSTEXPR vec<2, T, Q> & operator+=(vec<1, U, Q>
const& v);
159 GLM_FUNC_DISCARD_DECL GLM_CONSTEXPR vec<2, T, Q> & operator+=(vec<2, U, Q>
const& v);
161 GLM_FUNC_DISCARD_DECL GLM_CONSTEXPR vec<2, T, Q> & operator-=(U scalar);
163 GLM_FUNC_DISCARD_DECL GLM_CONSTEXPR vec<2, T, Q> & operator-=(vec<1, U, Q>
const& v);
165 GLM_FUNC_DISCARD_DECL GLM_CONSTEXPR vec<2, T, Q> & operator-=(vec<2, U, Q>
const& v);
167 GLM_FUNC_DISCARD_DECL GLM_CONSTEXPR vec<2, T, Q> & operator*=(U scalar);
169 GLM_FUNC_DISCARD_DECL GLM_CONSTEXPR vec<2, T, Q> & operator*=(vec<1, U, Q>
const& v);
171 GLM_FUNC_DISCARD_DECL GLM_CONSTEXPR vec<2, T, Q> & operator*=(vec<2, U, Q>
const& v);
173 GLM_FUNC_DISCARD_DECL GLM_CONSTEXPR vec<2, T, Q> & operator/=(U scalar);
175 GLM_FUNC_DISCARD_DECL GLM_CONSTEXPR vec<2, T, Q> & operator/=(vec<1, U, Q>
const& v);
177 GLM_FUNC_DISCARD_DECL GLM_CONSTEXPR vec<2, T, Q> & operator/=(vec<2, U, Q>
const& v);
181 GLM_FUNC_DISCARD_DECL GLM_CONSTEXPR vec<2, T, Q> & operator++();
182 GLM_FUNC_DISCARD_DECL GLM_CONSTEXPR vec<2, T, Q> & operator--();
183 GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator++(
int);
184 GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator--(
int);
189 GLM_FUNC_DISCARD_DECL GLM_CONSTEXPR vec<2, T, Q> & operator%=(U scalar);
191 GLM_FUNC_DISCARD_DECL GLM_CONSTEXPR vec<2, T, Q> & operator%=(vec<1, U, Q>
const& v);
193 GLM_FUNC_DISCARD_DECL GLM_CONSTEXPR vec<2, T, Q> & operator%=(vec<2, U, Q>
const& v);
195 GLM_FUNC_DISCARD_DECL GLM_CONSTEXPR vec<2, T, Q> & operator&=(U scalar);
197 GLM_FUNC_DISCARD_DECL GLM_CONSTEXPR vec<2, T, Q> & operator&=(vec<1, U, Q>
const& v);
199 GLM_FUNC_DISCARD_DECL GLM_CONSTEXPR vec<2, T, Q> & operator&=(vec<2, U, Q>
const& v);
201 GLM_FUNC_DISCARD_DECL GLM_CONSTEXPR vec<2, T, Q> & operator|=(U scalar);
203 GLM_FUNC_DISCARD_DECL GLM_CONSTEXPR vec<2, T, Q> & operator|=(vec<1, U, Q>
const& v);
205 GLM_FUNC_DISCARD_DECL GLM_CONSTEXPR vec<2, T, Q> & operator|=(vec<2, U, Q>
const& v);
207 GLM_FUNC_DISCARD_DECL GLM_CONSTEXPR vec<2, T, Q> & operator^=(U scalar);
209 GLM_FUNC_DISCARD_DECL GLM_CONSTEXPR vec<2, T, Q> & operator^=(vec<1, U, Q>
const& v);
211 GLM_FUNC_DISCARD_DECL GLM_CONSTEXPR vec<2, T, Q> & operator^=(vec<2, U, Q>
const& v);
213 GLM_FUNC_DISCARD_DECL GLM_CONSTEXPR vec<2, T, Q> & operator<<=(U scalar);
215 GLM_FUNC_DISCARD_DECL GLM_CONSTEXPR vec<2, T, Q> & operator<<=(vec<1, U, Q>
const& v);
217 GLM_FUNC_DISCARD_DECL GLM_CONSTEXPR vec<2, T, Q> & operator<<=(vec<2, U, Q>
const& v);
219 GLM_FUNC_DISCARD_DECL GLM_CONSTEXPR vec<2, T, Q> & operator>>=(U scalar);
221 GLM_FUNC_DISCARD_DECL GLM_CONSTEXPR vec<2, T, Q> & operator>>=(vec<1, U, Q>
const& v);
223 GLM_FUNC_DISCARD_DECL GLM_CONSTEXPR vec<2, T, Q> & operator>>=(vec<2, U, Q>
const& v);
228 template<
typename T, qualifier Q>
229 GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator+(vec<2, T, Q>
const& v);
231 template<
typename T, qualifier Q>
232 GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator-(vec<2, T, Q>
const& v);
236 template<
typename T, qualifier Q>
237 GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator+(vec<2, T, Q>
const& v, T scalar);
239 template<
typename T, qualifier Q>
240 GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator+(vec<2, T, Q>
const& v1, vec<1, T, Q>
const& v2);
242 template<
typename T, qualifier Q>
243 GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator+(T scalar, vec<2, T, Q>
const& v);
245 template<
typename T, qualifier Q>
246 GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator+(vec<1, T, Q>
const& v1, vec<2, T, Q>
const& v2);
248 template<
typename T, qualifier Q>
249 GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator+(vec<2, T, Q>
const& v1, vec<2, T, Q>
const& v2);
251 template<
typename T, qualifier Q>
252 GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator-(vec<2, T, Q>
const& v, T scalar);
254 template<
typename T, qualifier Q>
255 GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator-(vec<2, T, Q>
const& v1, vec<1, T, Q>
const& v2);
257 template<
typename T, qualifier Q>
258 GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator-(T scalar, vec<2, T, Q>
const& v);
260 template<
typename T, qualifier Q>
261 GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator-(vec<1, T, Q>
const& v1, vec<2, T, Q>
const& v2);
263 template<
typename T, qualifier Q>
264 GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator-(vec<2, T, Q>
const& v1, vec<2, T, Q>
const& v2);
266 template<
typename T, qualifier Q>
267 GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator*(vec<2, T, Q>
const& v, T scalar);
269 template<
typename T, qualifier Q>
270 GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator*(vec<2, T, Q>
const& v1, vec<1, T, Q>
const& v2);
272 template<
typename T, qualifier Q>
273 GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator*(T scalar, vec<2, T, Q>
const& v);
275 template<
typename T, qualifier Q>
276 GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator*(vec<1, T, Q>
const& v1, vec<2, T, Q>
const& v2);
278 template<
typename T, qualifier Q>
279 GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator*(vec<2, T, Q>
const& v1, vec<2, T, Q>
const& v2);
281 template<
typename T, qualifier Q>
282 GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator/(vec<2, T, Q>
const& v, T scalar);
284 template<
typename T, qualifier Q>
285 GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator/(vec<2, T, Q>
const& v1, vec<1, T, Q>
const& v2);
287 template<
typename T, qualifier Q>
288 GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator/(T scalar, vec<2, T, Q>
const& v);
290 template<
typename T, qualifier Q>
291 GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator/(vec<1, T, Q>
const& v1, vec<2, T, Q>
const& v2);
293 template<
typename T, qualifier Q>
294 GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator/(vec<2, T, Q>
const& v1, vec<2, T, Q>
const& v2);
296 template<
typename T, qualifier Q>
297 GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator%(vec<2, T, Q>
const& v, T scalar);
299 template<
typename T, qualifier Q>
300 GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator%(vec<2, T, Q>
const& v1, vec<1, T, Q>
const& v2);
302 template<
typename T, qualifier Q>
303 GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator%(T scalar, vec<2, T, Q>
const& v);
305 template<
typename T, qualifier Q>
306 GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator%(vec<1, T, Q>
const& v1, vec<2, T, Q>
const& v2);
308 template<
typename T, qualifier Q>
309 GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator%(vec<2, T, Q>
const& v1, vec<2, T, Q>
const& v2);
311 template<
typename T, qualifier Q>
312 GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator&(vec<2, T, Q>
const& v, T scalar);
314 template<
typename T, qualifier Q>
315 GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator&(vec<2, T, Q>
const& v1, vec<1, T, Q>
const& v2);
317 template<
typename T, qualifier Q>
318 GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator&(T scalar, vec<2, T, Q>
const& v);
320 template<
typename T, qualifier Q>
321 GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator&(vec<1, T, Q>
const& v1, vec<2, T, Q>
const& v2);
323 template<
typename T, qualifier Q>
324 GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator&(vec<2, T, Q>
const& v1, vec<2, T, Q>
const& v2);
326 template<
typename T, qualifier Q>
327 GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator|(vec<2, T, Q>
const& v, T scalar);
329 template<
typename T, qualifier Q>
330 GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator|(vec<2, T, Q>
const& v1, vec<1, T, Q>
const& v2);
332 template<
typename T, qualifier Q>
333 GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator|(T scalar, vec<2, T, Q>
const& v);
335 template<
typename T, qualifier Q>
336 GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator|(vec<1, T, Q>
const& v1, vec<2, T, Q>
const& v2);
338 template<
typename T, qualifier Q>
339 GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator|(vec<2, T, Q>
const& v1, vec<2, T, Q>
const& v2);
341 template<
typename T, qualifier Q>
342 GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator^(vec<2, T, Q>
const& v, T scalar);
344 template<
typename T, qualifier Q>
345 GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator^(vec<2, T, Q>
const& v1, vec<1, T, Q>
const& v2);
347 template<
typename T, qualifier Q>
348 GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator^(T scalar, vec<2, T, Q>
const& v);
350 template<
typename T, qualifier Q>
351 GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator^(vec<1, T, Q>
const& v1, vec<2, T, Q>
const& v2);
353 template<
typename T, qualifier Q>
354 GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator^(vec<2, T, Q>
const& v1, vec<2, T, Q>
const& v2);
356 template<
typename T, qualifier Q>
357 GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator<<(vec<2, T, Q>
const& v, T scalar);
359 template<
typename T, qualifier Q>
360 GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator<<(vec<2, T, Q>
const& v1, vec<1, T, Q>
const& v2);
362 template<
typename T, qualifier Q>
363 GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator<<(T scalar, vec<2, T, Q>
const& v);
365 template<
typename T, qualifier Q>
366 GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator<<(vec<1, T, Q>
const& v1, vec<2, T, Q>
const& v2);
368 template<
typename T, qualifier Q>
369 GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator<<(vec<2, T, Q>
const& v1, vec<2, T, Q>
const& v2);
371 template<
typename T, qualifier Q>
372 GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator>>(vec<2, T, Q>
const& v, T scalar);
374 template<
typename T, qualifier Q>
375 GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator>>(vec<2, T, Q>
const& v1, vec<1, T, Q>
const& v2);
377 template<
typename T, qualifier Q>
378 GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator>>(T scalar, vec<2, T, Q>
const& v);
380 template<
typename T, qualifier Q>
381 GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator>>(vec<1, T, Q>
const& v1, vec<2, T, Q>
const& v2);
383 template<
typename T, qualifier Q>
384 GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator>>(vec<2, T, Q>
const& v1, vec<2, T, Q>
const& v2);
386 template<
typename T, qualifier Q>
387 GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator~(vec<2, T, Q>
const& v);
391 template<
typename T, qualifier Q>
392 GLM_FUNC_DECL GLM_CONSTEXPR
bool operator==(vec<2, T, Q>
const& v1, vec<2, T, Q>
const& v2);
394 template<
typename T, qualifier Q>
395 GLM_FUNC_DECL GLM_CONSTEXPR
bool operator!=(vec<2, T, Q>
const& v1, vec<2, T, Q>
const& v2);
397 template<qualifier Q>
398 GLM_FUNC_DECL GLM_CONSTEXPR vec<2, bool, Q> operator&&(vec<2, bool, Q>
const& v1, vec<2, bool, Q>
const& v2);
400 template<qualifier Q>
401 GLM_FUNC_DECL GLM_CONSTEXPR vec<2, bool, Q> operator||(vec<2, bool, Q>
const& v1, vec<2, bool, Q>
const& v2);
404 #ifndef GLM_EXTERNAL_TEMPLATE
405 #include "type_vec2.inl"
406 #endif//GLM_EXTERNAL_TEMPLATE