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