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