0.9.7
type_vec2.hpp
Go to the documentation of this file.
1 
33 #pragma once
34 
35 #include "type_vec.hpp"
36 #ifdef GLM_SWIZZLE
37 # if GLM_HAS_ANONYMOUS_UNION
38 # include "_swizzle.hpp"
39 # else
40 # include "_swizzle_func.hpp"
41 # endif
42 #endif //GLM_SWIZZLE
43 #include <cstddef>
44 
45 namespace glm
46 {
47  template <typename T, precision P = defaultp>
48  struct tvec2
49  {
50  // -- Implementation detail --
51 
52  typedef tvec2<T, P> type;
53  typedef tvec2<bool, P> bool_type;
54  typedef T value_type;
55 
56 # ifdef GLM_META_PROG_HELPERS
57  static GLM_RELAXED_CONSTEXPR length_t components = 2;
58  static GLM_RELAXED_CONSTEXPR precision prec = P;
59 # endif//GLM_META_PROG_HELPERS
60 
61  // -- Data --
62 
63 # if GLM_HAS_ANONYMOUS_UNION
64  union
65  {
66  struct{ T x, y; };
67  struct{ T r, g; };
68  struct{ T s, t; };
69 
70 # ifdef GLM_SWIZZLE
71  _GLM_SWIZZLE2_2_MEMBERS(T, P, tvec2, x, y)
72  _GLM_SWIZZLE2_2_MEMBERS(T, P, tvec2, r, g)
73  _GLM_SWIZZLE2_2_MEMBERS(T, P, tvec2, s, t)
74  _GLM_SWIZZLE2_3_MEMBERS(T, P, tvec3, x, y)
75  _GLM_SWIZZLE2_3_MEMBERS(T, P, tvec3, r, g)
76  _GLM_SWIZZLE2_3_MEMBERS(T, P, tvec3, s, t)
77  _GLM_SWIZZLE2_4_MEMBERS(T, P, tvec4, x, y)
78  _GLM_SWIZZLE2_4_MEMBERS(T, P, tvec4, r, g)
79  _GLM_SWIZZLE2_4_MEMBERS(T, P, tvec4, s, t)
80 # endif//GLM_SWIZZLE
81  };
82 # else
83  union {T x, r, s;};
84  union {T y, g, t;};
85 
86 # ifdef GLM_SWIZZLE
87  GLM_SWIZZLE_GEN_VEC_FROM_VEC2(T, P, tvec2, tvec2, tvec3, tvec4)
88 # endif//GLM_SWIZZLE
89 # endif
90 
91  // -- Component accesses --
92 
93 # ifdef GLM_FORCE_SIZE_FUNC
94  typedef size_t size_type;
96  GLM_FUNC_DECL GLM_CONSTEXPR size_type size() const;
97 
98  GLM_FUNC_DECL T & operator[](size_type i);
99  GLM_FUNC_DECL T const & operator[](size_type i) const;
100 # else
101  typedef length_t length_type;
103  GLM_FUNC_DECL GLM_CONSTEXPR length_type length() const;
104 
105  GLM_FUNC_DECL T & operator[](length_type i);
106  GLM_FUNC_DECL T const & operator[](length_type i) const;
107 # endif//GLM_FORCE_SIZE_FUNC
108 
109  // -- Implicit basic constructors --
110 
111  GLM_FUNC_DECL tvec2() GLM_DEFAULT_CTOR;
112  GLM_FUNC_DECL tvec2(tvec2<T, P> const & v) GLM_DEFAULT;
113  template <precision Q>
114  GLM_FUNC_DECL tvec2(tvec2<T, Q> const & v);
115 
116  // -- Explicit basic constructors --
117 
118  GLM_FUNC_DECL explicit tvec2(ctor);
119  GLM_FUNC_DECL explicit tvec2(T const & s);
120  GLM_FUNC_DECL tvec2(T const & s1, T const & s2);
121 
122  // -- Conversion constructors --
123 
125  template <typename A, typename B>
126  GLM_FUNC_DECL tvec2(A const & x, B const & y);
127  template <typename A, typename B>
128  GLM_FUNC_DECL tvec2(tvec1<A, P> const & v1, tvec1<B, P> const & v2);
129 
130  // -- Conversion vector constructors --
131 
133  template <typename U, precision Q>
134  GLM_FUNC_DECL explicit tvec2(tvec3<U, Q> const & v);
136  template <typename U, precision Q>
137  GLM_FUNC_DECL explicit tvec2(tvec4<U, Q> const & v);
138 
140  template <typename U, precision Q>
141  GLM_FUNC_DECL GLM_EXPLICIT tvec2(tvec2<U, Q> const & v);
142 
143  // -- Swizzle constructors --
144 
145 # if GLM_HAS_ANONYMOUS_UNION && defined(GLM_SWIZZLE)
146  template <int E0, int E1>
147  GLM_FUNC_DECL tvec2(detail::_swizzle<2, T, P, tvec2<T, P>, E0, E1,-1,-2> const & that)
148  {
149  *this = that();
150  }
151 # endif// GLM_HAS_ANONYMOUS_UNION && defined(GLM_SWIZZLE)
152 
153  // -- Unary arithmetic operators --
154 
155  GLM_FUNC_DECL tvec2<T, P>& operator=(tvec2<T, P> const & v) GLM_DEFAULT;
156 
157  template <typename U>
158  GLM_FUNC_DECL tvec2<T, P>& operator=(tvec2<U, P> const & v);
159  template <typename U>
160  GLM_FUNC_DECL tvec2<T, P>& operator+=(U s);
161  template <typename U>
162  GLM_FUNC_DECL tvec2<T, P>& operator+=(tvec1<U, P> const & v);
163  template <typename U>
164  GLM_FUNC_DECL tvec2<T, P>& operator+=(tvec2<U, P> const & v);
165  template <typename U>
166  GLM_FUNC_DECL tvec2<T, P>& operator-=(U s);
167  template <typename U>
168  GLM_FUNC_DECL tvec2<T, P>& operator-=(tvec1<U, P> const & v);
169  template <typename U>
170  GLM_FUNC_DECL tvec2<T, P>& operator-=(tvec2<U, P> const & v);
171  template <typename U>
172  GLM_FUNC_DECL tvec2<T, P>& operator*=(U s);
173  template <typename U>
174  GLM_FUNC_DECL tvec2<T, P>& operator*=(tvec1<U, P> const & v);
175  template <typename U>
176  GLM_FUNC_DECL tvec2<T, P>& operator*=(tvec2<U, P> const & v);
177  template <typename U>
178  GLM_FUNC_DECL tvec2<T, P>& operator/=(U s);
179  template <typename U>
180  GLM_FUNC_DECL tvec2<T, P>& operator/=(tvec1<U, P> const & v);
181  template <typename U>
182  GLM_FUNC_DECL tvec2<T, P>& operator/=(tvec2<U, P> const & v);
183 
184  // -- Increment and decrement operators --
185 
186  GLM_FUNC_DECL tvec2<T, P> & operator++();
187  GLM_FUNC_DECL tvec2<T, P> & operator--();
188  GLM_FUNC_DECL tvec2<T, P> operator++(int);
189  GLM_FUNC_DECL tvec2<T, P> operator--(int);
190 
191  // -- Unary bit operators --
192 
193  template <typename U>
194  GLM_FUNC_DECL tvec2<T, P> & operator%=(U s);
195  template <typename U>
196  GLM_FUNC_DECL tvec2<T, P> & operator%=(tvec1<U, P> const & v);
197  template <typename U>
198  GLM_FUNC_DECL tvec2<T, P> & operator%=(tvec2<U, P> const & v);
199  template <typename U>
200  GLM_FUNC_DECL tvec2<T, P> & operator&=(U s);
201  template <typename U>
202  GLM_FUNC_DECL tvec2<T, P> & operator&=(tvec1<U, P> const & v);
203  template <typename U>
204  GLM_FUNC_DECL tvec2<T, P> & operator&=(tvec2<U, P> const & v);
205  template <typename U>
206  GLM_FUNC_DECL tvec2<T, P> & operator|=(U s);
207  template <typename U>
208  GLM_FUNC_DECL tvec2<T, P> & operator|=(tvec1<U, P> const & v);
209  template <typename U>
210  GLM_FUNC_DECL tvec2<T, P> & operator|=(tvec2<U, P> const & v);
211  template <typename U>
212  GLM_FUNC_DECL tvec2<T, P> & operator^=(U s);
213  template <typename U>
214  GLM_FUNC_DECL tvec2<T, P> & operator^=(tvec1<U, P> const & v);
215  template <typename U>
216  GLM_FUNC_DECL tvec2<T, P> & operator^=(tvec2<U, P> const & v);
217  template <typename U>
218  GLM_FUNC_DECL tvec2<T, P> & operator<<=(U s);
219  template <typename U>
220  GLM_FUNC_DECL tvec2<T, P> & operator<<=(tvec1<U, P> const & v);
221  template <typename U>
222  GLM_FUNC_DECL tvec2<T, P> & operator<<=(tvec2<U, P> const & v);
223  template <typename U>
224  GLM_FUNC_DECL tvec2<T, P> & operator>>=(U s);
225  template <typename U>
226  GLM_FUNC_DECL tvec2<T, P> & operator>>=(tvec1<U, P> const & v);
227  template <typename U>
228  GLM_FUNC_DECL tvec2<T, P> & operator>>=(tvec2<U, P> const & v);
229  };
230 
231  // -- Unary operators --
232 
233  template <typename T, precision P>
234  GLM_FUNC_DECL tvec2<T, P> operator-(tvec2<T, P> const & v);
235 
236  // -- Binary operators --
237 
238  template <typename T, precision P>
239  GLM_FUNC_DECL tvec2<T, P> operator+(tvec2<T, P> const & v, T const & s);
240 
241  template <typename T, precision P>
242  GLM_FUNC_DECL tvec2<T, P> operator+(tvec2<T, P> const & v1, tvec1<T, P> const & v2);
243 
244  template <typename T, precision P>
245  GLM_FUNC_DECL tvec2<T, P> operator+(T const & s, tvec2<T, P> const & v);
246 
247  template <typename T, precision P>
248  GLM_FUNC_DECL tvec2<T, P> operator+(tvec1<T, P> const & v1, tvec2<T, P> const & v2);
249 
250  template <typename T, precision P>
251  GLM_FUNC_DECL tvec2<T, P> operator+(tvec2<T, P> const & v1, tvec2<T, P> const & v2);
252 
253  template <typename T, precision P>
254  GLM_FUNC_DECL tvec2<T, P> operator-(tvec2<T, P> const & v, T const & s);
255 
256  template <typename T, precision P>
257  GLM_FUNC_DECL tvec2<T, P> operator-(tvec2<T, P> const & v1, tvec1<T, P> const & v2);
258 
259  template <typename T, precision P>
260  GLM_FUNC_DECL tvec2<T, P> operator-(T const & s, tvec2<T, P> const & v);
261 
262  template <typename T, precision P>
263  GLM_FUNC_DECL tvec2<T, P> operator-(tvec1<T, P> const & v1, tvec2<T, P> const & v2);
264 
265  template <typename T, precision P>
266  GLM_FUNC_DECL tvec2<T, P> operator-(tvec2<T, P> const & v1, tvec2<T, P> const & v2);
267 
268  template <typename T, precision P>
269  GLM_FUNC_DECL tvec2<T, P> operator*(tvec2<T, P> const & v, T const & s);
270 
271  template <typename T, precision P>
272  GLM_FUNC_DECL tvec2<T, P> operator*(tvec2<T, P> const & v1, tvec1<T, P> const & v2);
273 
274  template <typename T, precision P>
275  GLM_FUNC_DECL tvec2<T, P> operator*(T const & s, tvec2<T, P> const & v);
276 
277  template <typename T, precision P>
278  GLM_FUNC_DECL tvec2<T, P> operator*(tvec1<T, P> const & v1, tvec2<T, P> const & v2);
279 
280  template <typename T, precision P>
281  GLM_FUNC_DECL tvec2<T, P> operator*(tvec2<T, P> const & v1, tvec2<T, P> const & v2);
282 
283  template <typename T, precision P>
284  GLM_FUNC_DECL tvec2<T, P> operator/(tvec2<T, P> const & v, T const & s);
285 
286  template <typename T, precision P>
287  GLM_FUNC_DECL tvec2<T, P> operator/(tvec2<T, P> const & v1, tvec1<T, P> const & v2);
288 
289  template <typename T, precision P>
290  GLM_FUNC_DECL tvec2<T, P> operator/(T const & s, tvec2<T, P> const & v);
291 
292  template <typename T, precision P>
293  GLM_FUNC_DECL tvec2<T, P> operator/(tvec1<T, P> const & v1, tvec2<T, P> const & v2);
294 
295  template <typename T, precision P>
296  GLM_FUNC_DECL tvec2<T, P> operator/(tvec2<T, P> const & v1, tvec2<T, P> const & v2);
297 
298  template <typename T, precision P>
299  GLM_FUNC_DECL tvec2<T, P> operator-(tvec2<T, P> const & v);
300 
301  template <typename T, precision P>
302  GLM_FUNC_DECL tvec2<T, P> operator%(tvec2<T, P> const & v, T const & s);
303 
304  template <typename T, precision P>
305  GLM_FUNC_DECL tvec2<T, P> operator%(tvec2<T, P> const & v1, tvec1<T, P> const & v2);
306 
307  template <typename T, precision P>
308  GLM_FUNC_DECL tvec2<T, P> operator%(T const & s, tvec2<T, P> const & v);
309 
310  template <typename T, precision P>
311  GLM_FUNC_DECL tvec2<T, P> operator%(tvec1<T, P> const & v1, tvec2<T, P> const & v2);
312 
313  template <typename T, precision P>
314  GLM_FUNC_DECL tvec2<T, P> operator%(tvec2<T, P> const & v1, tvec2<T, P> const & v2);
315 
316  template <typename T, precision P>
317  GLM_FUNC_DECL tvec2<T, P> operator&(tvec2<T, P> const & v, T const & s);
318 
319  template <typename T, precision P>
320  GLM_FUNC_DECL tvec2<T, P> operator&(tvec2<T, P> const & v1, tvec1<T, P> const & v2);
321 
322  template <typename T, precision P>
323  GLM_FUNC_DECL tvec2<T, P> operator&(T const & s, tvec2<T, P> const & v);
324 
325  template <typename T, precision P>
326  GLM_FUNC_DECL tvec2<T, P> operator&(tvec1<T, P> const & v1, tvec2<T, P> const & v2);
327 
328  template <typename T, precision P>
329  GLM_FUNC_DECL tvec2<T, P> operator&(tvec2<T, P> const & v1, tvec2<T, P> const & v2);
330 
331  template <typename T, precision P>
332  GLM_FUNC_DECL tvec2<T, P> operator|(tvec2<T, P> const & v, T const & s);
333 
334  template <typename T, precision P>
335  GLM_FUNC_DECL tvec2<T, P> operator|(tvec2<T, P> const & v1, tvec1<T, P> const & v2);
336 
337  template <typename T, precision P>
338  GLM_FUNC_DECL tvec2<T, P> operator|(T const & s, tvec2<T, P> const & v);
339 
340  template <typename T, precision P>
341  GLM_FUNC_DECL tvec2<T, P> operator|(tvec1<T, P> const & v1, tvec2<T, P> const & v2);
342 
343  template <typename T, precision P>
344  GLM_FUNC_DECL tvec2<T, P> operator|(tvec2<T, P> const & v1, tvec2<T, P> const & v2);
345 
346  template <typename T, precision P>
347  GLM_FUNC_DECL tvec2<T, P> operator^(tvec2<T, P> const & v, T const & s);
348 
349  template <typename T, precision P>
350  GLM_FUNC_DECL tvec2<T, P> operator^(tvec2<T, P> const & v1, tvec1<T, P> const & v2);
351 
352  template <typename T, precision P>
353  GLM_FUNC_DECL tvec2<T, P> operator^(T const & s, tvec2<T, P> const & v);
354 
355  template <typename T, precision P>
356  GLM_FUNC_DECL tvec2<T, P> operator^(tvec1<T, P> const & v1, tvec2<T, P> const & v2);
357 
358  template <typename T, precision P>
359  GLM_FUNC_DECL tvec2<T, P> operator^(tvec2<T, P> const & v1, tvec2<T, P> const & v2);
360 
361  template <typename T, precision P>
362  GLM_FUNC_DECL tvec2<T, P> operator<<(tvec2<T, P> const & v, T const & s);
363 
364  template <typename T, precision P>
365  GLM_FUNC_DECL tvec2<T, P> operator<<(tvec2<T, P> const & v1, tvec1<T, P> const & v2);
366 
367  template <typename T, precision P>
368  GLM_FUNC_DECL tvec2<T, P> operator<<(T const & s, tvec2<T, P> const & v);
369 
370  template <typename T, precision P>
371  GLM_FUNC_DECL tvec2<T, P> operator<<(tvec1<T, P> const & v1, tvec2<T, P> const & v2);
372 
373  template <typename T, precision P>
374  GLM_FUNC_DECL tvec2<T, P> operator<<(tvec2<T, P> const & v1, tvec2<T, P> const & v2);
375 
376  template <typename T, precision P>
377  GLM_FUNC_DECL tvec2<T, P> operator>>(tvec2<T, P> const & v, T const & s);
378 
379  template <typename T, precision P>
380  GLM_FUNC_DECL tvec2<T, P> operator>>(tvec2<T, P> const & v1, tvec1<T, P> const & v2);
381 
382  template <typename T, precision P>
383  GLM_FUNC_DECL tvec2<T, P> operator>>(T const & s, tvec2<T, P> const & v);
384 
385  template <typename T, precision P>
386  GLM_FUNC_DECL tvec2<T, P> operator>>(tvec1<T, P> const & v1, tvec2<T, P> const & v2);
387 
388  template <typename T, precision P>
389  GLM_FUNC_DECL tvec2<T, P> operator>>(tvec2<T, P> const & v1, tvec2<T, P> const & v2);
390 
391  template <typename T, precision P>
392  GLM_FUNC_DECL tvec2<T, P> operator~(tvec2<T, P> const & v);
393 
394  // -- Boolean operators --
395 
396  template <typename T, precision P>
397  GLM_FUNC_DECL bool operator==(tvec2<T, P> const & v1, tvec2<T, P> const & v2);
398 
399  template <typename T, precision P>
400  GLM_FUNC_DECL bool operator!=(tvec2<T, P> const & v1, tvec2<T, P> const & v2);
401 }//namespace glm
402 
403 #ifndef GLM_EXTERNAL_TEMPLATE
404 #include "type_vec2.inl"
405 #endif//GLM_EXTERNAL_TEMPLATE
GLM_FUNC_DECL T length(vecType< T, P > const &x)
Returns the length of x, i.e., sqrt(x * x).
Definition: _noise.hpp:40
OpenGL Mathematics (glm.g-truc.net)
OpenGL Mathematics (glm.g-truc.net)
OpenGL Mathematics (glm.g-truc.net)