| 0.9.6

- Main Page
- Modules
- Files

- File List

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
_swizzle_func.hpp
OpenGL Mathematics (glm.g-truc.net)
glm::length
GLM_FUNC_DECL T length(vecType< T, P > const &x)
Returns the length of x, i.e., sqrt(x * x).
glm
Definition: _noise.hpp:39
type_vec.hpp
OpenGL Mathematics (glm.g-truc.net)
_swizzle.hpp
OpenGL Mathematics (glm.g-truc.net)