0.9.6
type_vec1.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 tvec1
46  {
48  // Implementation detail
49 
50  typedef tvec1<T, P> type;
51  typedef tvec1<bool, P> bool_type;
52  typedef T value_type;
53 
55  // Helper
56 
57 # ifdef GLM_FORCE_SIZE_FUNC
58  GLM_FUNC_DECL GLM_CONSTEXPR size_t size() const;
60 # else
61  GLM_FUNC_DECL GLM_CONSTEXPR length_t length() const;
63 # endif//GLM_FORCE_SIZE_FUNC
64 
66  // Data
67 
68 # if GLM_HAS_ANONYMOUS_UNION
69  union
70  {
71  T x;
72  T r;
73  T s;
74 /*
75 # ifdef GLM_SWIZZLE
76  _GLM_SWIZZLE1_2_MEMBERS(T, P, tvec2, x)
77  _GLM_SWIZZLE1_2_MEMBERS(T, P, tvec2, r)
78  _GLM_SWIZZLE1_2_MEMBERS(T, P, tvec2, s)
79  _GLM_SWIZZLE1_3_MEMBERS(T, P, tvec3, x)
80  _GLM_SWIZZLE1_3_MEMBERS(T, P, tvec3, r)
81  _GLM_SWIZZLE1_3_MEMBERS(T, P, tvec3, s)
82  _GLM_SWIZZLE1_4_MEMBERS(T, P, tvec4, x)
83  _GLM_SWIZZLE1_4_MEMBERS(T, P, tvec4, r)
84  _GLM_SWIZZLE1_4_MEMBERS(T, P, tvec4, s)
85 # endif//GLM_SWIZZLE*/
86  };
87 # else
88  union {T x, r, s;};
89 /*
90 # ifdef GLM_SWIZZLE
91  GLM_SWIZZLE_GEN_VEC_FROM_VEC1(T, P, tvec2, tvec2, tvec3, tvec4)
92 # endif//GLM_SWIZZLE*/
93 # endif
94 
96  // Accesses
97 
98  GLM_FUNC_DECL T & operator[](length_t i);
99  GLM_FUNC_DECL T const & operator[](length_t i) const;
100 
102  // Implicit basic constructors
103 
104  GLM_FUNC_DECL tvec1();
105  template <precision Q>
106  GLM_FUNC_DECL tvec1(tvec1<T, Q> const & v);
107 
109  // Explicit basic constructors
110 
111  GLM_FUNC_DECL explicit tvec1(ctor);
112  GLM_FUNC_DECL explicit tvec1(T const & s);
113 
115  // Conversion vector constructors
116 
118  template <typename U, precision Q>
119  GLM_FUNC_DECL explicit tvec1(tvec2<U, Q> const & v);
121  template <typename U, precision Q>
122  GLM_FUNC_DECL explicit tvec1(tvec3<U, Q> const & v);
124  template <typename U, precision Q>
125  GLM_FUNC_DECL explicit tvec1(tvec4<U, Q> const & v);
126 
127 # ifdef GLM_FORCE_EXPLICIT_CTOR
128  template <typename U, precision Q>
130  GLM_FUNC_DECL explicit tvec1(tvec1<U, Q> const & v);
131 # else
132  template <typename U, precision Q>
134  GLM_FUNC_DECL tvec1(tvec1<U, Q> const & v);
135 # endif
136 
138  // Swizzle constructors
139 
140 # if(GLM_HAS_ANONYMOUS_UNION && defined(GLM_SWIZZLE))
141  template <int E0>
142  GLM_FUNC_DECL tvec1(detail::_swizzle<1, T, P, tvec1<T, P>, E0, -1,-2,-3> const & that)
143  {
144  *this = that();
145  }
146 # endif//(GLM_HAS_ANONYMOUS_UNION && defined(GLM_SWIZZLE))
147 
149  // Unary arithmetic operators
150 
151  template <typename U>
152  GLM_FUNC_DECL tvec1<T, P> & operator=(tvec1<U, P> const & v);
153  template <typename U>
154  GLM_FUNC_DECL tvec1<T, P> & operator+=(U const & s);
155  template <typename U>
156  GLM_FUNC_DECL tvec1<T, P> & operator+=(tvec1<U, P> const & v);
157  template <typename U>
158  GLM_FUNC_DECL tvec1<T, P> & operator-=(U const & s);
159  template <typename U>
160  GLM_FUNC_DECL tvec1<T, P> & operator-=(tvec1<U, P> const & v);
161  template <typename U>
162  GLM_FUNC_DECL tvec1<T, P> & operator*=(U const & s);
163  template <typename U>
164  GLM_FUNC_DECL tvec1<T, P> & operator*=(tvec1<U, P> const & v);
165  template <typename U>
166  GLM_FUNC_DECL tvec1<T, P> & operator/=(U const & s);
167  template <typename U>
168  GLM_FUNC_DECL tvec1<T, P> & operator/=(tvec1<U, P> const & v);
169 
171  // Increment and decrement operators
172 
173  GLM_FUNC_DECL tvec1<T, P> & operator++();
174  GLM_FUNC_DECL tvec1<T, P> & operator--();
175  GLM_FUNC_DECL tvec1<T, P> operator++(int);
176  GLM_FUNC_DECL tvec1<T, P> operator--(int);
177 
179  // Unary bit operators
180 
181  template <typename U>
182  GLM_FUNC_DECL tvec1<T, P> & operator%=(U const & s);
183  template <typename U>
184  GLM_FUNC_DECL tvec1<T, P> & operator%=(tvec1<U, P> const & v);
185  template <typename U>
186  GLM_FUNC_DECL tvec1<T, P> & operator&=(U const & s);
187  template <typename U>
188  GLM_FUNC_DECL tvec1<T, P> & operator&=(tvec1<U, P> const & v);
189  template <typename U>
190  GLM_FUNC_DECL tvec1<T, P> & operator|=(U const & s);
191  template <typename U>
192  GLM_FUNC_DECL tvec1<T, P> & operator|=(tvec1<U, P> const & v);
193  template <typename U>
194  GLM_FUNC_DECL tvec1<T, P> & operator^=(U const & s);
195  template <typename U>
196  GLM_FUNC_DECL tvec1<T, P> & operator^=(tvec1<U, P> const & v);
197  template <typename U>
198  GLM_FUNC_DECL tvec1<T, P> & operator<<=(U const & s);
199  template <typename U>
200  GLM_FUNC_DECL tvec1<T, P> & operator<<=(tvec1<U, P> const & v);
201  template <typename U>
202  GLM_FUNC_DECL tvec1<T, P> & operator>>=(U const & s);
203  template <typename U>
204  GLM_FUNC_DECL tvec1<T, P> & operator>>=(tvec1<U, P> const & v);
205  };
206 
207 
208  template <typename T, precision P>
209  GLM_FUNC_DECL tvec1<T, P> operator+(tvec1<T, P> const & v, T const & s);
210 
211  template <typename T, precision P>
212  GLM_FUNC_DECL tvec1<T, P> operator+(T const & s, tvec1<T, P> const & v);
213 
214  template <typename T, precision P>
215  GLM_FUNC_DECL tvec1<T, P> operator+(tvec1<T, P> const & v1, tvec1<T, P> const & v2);
216 
217  template <typename T, precision P>
218  GLM_FUNC_DECL tvec1<T, P> operator-(tvec1<T, P> const & v, T const & s);
219 
220  template <typename T, precision P>
221  GLM_FUNC_DECL tvec1<T, P> operator-(T const & s, tvec1<T, P> const & v);
222 
223  template <typename T, precision P>
224  GLM_FUNC_DECL tvec1<T, P> operator- (tvec1<T, P> const & v1, tvec1<T, P> const & v2);
225 
226  template <typename T, precision P>
227  GLM_FUNC_DECL tvec1<T, P> operator*(tvec1<T, P> const & v, T const & s);
228 
229  template <typename T, precision P>
230  GLM_FUNC_DECL tvec1<T, P> operator*(T const & s, tvec1<T, P> const & v);
231 
232  template <typename T, precision P>
233  GLM_FUNC_DECL tvec1<T, P> operator*(tvec1<T, P> const & v1, tvec1<T, P> const & v2);
234 
235  template <typename T, precision P>
236  GLM_FUNC_DECL tvec1<T, P> operator/(tvec1<T, P> const & v, T const & s);
237 
238  template <typename T, precision P>
239  GLM_FUNC_DECL tvec1<T, P> operator/(T const & s, tvec1<T, P> const & v);
240 
241  template <typename T, precision P>
242  GLM_FUNC_DECL tvec1<T, P> operator/(tvec1<T, P> const & v1, tvec1<T, P> const & v2);
243 
244  template <typename T, precision P>
245  GLM_FUNC_DECL tvec1<T, P> operator-(tvec1<T, P> const & v);
246 
247  template <typename T, precision P>
248  GLM_FUNC_DECL bool operator==(tvec1<T, P> const & v1, tvec1<T, P> const & v2);
249 
250  template <typename T, precision P>
251  GLM_FUNC_DECL bool operator!=(tvec1<T, P> const & v1, tvec1<T, P> const & v2);
252 
253  template <typename T, precision P>
254  GLM_FUNC_DECL tvec1<T, P> operator%(tvec1<T, P> const & v, T const & s);
255 
256  template <typename T, precision P>
257  GLM_FUNC_DECL tvec1<T, P> operator%(T const & s, tvec1<T, P> const & v);
258 
259  template <typename T, precision P>
260  GLM_FUNC_DECL tvec1<T, P> operator%(tvec1<T, P> const & v1, tvec1<T, P> const & v2);
261 
262  template <typename T, precision P>
263  GLM_FUNC_DECL tvec1<T, P> operator&(tvec1<T, P> const & v, T const & s);
264 
265  template <typename T, precision P>
266  GLM_FUNC_DECL tvec1<T, P> operator&(T const & s, tvec1<T, P> const & v);
267 
268  template <typename T, precision P>
269  GLM_FUNC_DECL tvec1<T, P> operator&(tvec1<T, P> const & v1, tvec1<T, P> const & v2);
270 
271  template <typename T, precision P>
272  GLM_FUNC_DECL tvec1<T, P> operator|(tvec1<T, P> const & v, T const & s);
273 
274  template <typename T, precision P>
275  GLM_FUNC_DECL tvec1<T, P> operator|(T const & s, tvec1<T, P> const & v);
276 
277  template <typename T, precision P>
278  GLM_FUNC_DECL tvec1<T, P> operator|(tvec1<T, P> const & v1, tvec1<T, P> const & v2);
279 
280  template <typename T, precision P>
281  GLM_FUNC_DECL tvec1<T, P> operator^(tvec1<T, P> const & v, T const & s);
282 
283  template <typename T, precision P>
284  GLM_FUNC_DECL tvec1<T, P> operator^(T const & s, tvec1<T, P> const & v);
285 
286  template <typename T, precision P>
287  GLM_FUNC_DECL tvec1<T, P> operator^(tvec1<T, P> const & v1, tvec1<T, P> const & v2);
288 
289  template <typename T, precision P>
290  GLM_FUNC_DECL tvec1<T, P> operator<<(tvec1<T, P> const & v, T const & s);
291 
292  template <typename T, precision P>
293  GLM_FUNC_DECL tvec1<T, P> operator<<(T const & s, tvec1<T, P> const & v);
294 
295  template <typename T, precision P>
296  GLM_FUNC_DECL tvec1<T, P> operator<<(tvec1<T, P> const & v1, tvec1<T, P> const & v2);
297 
298  template <typename T, precision P>
299  GLM_FUNC_DECL tvec1<T, P> operator>>(tvec1<T, P> const & v, T const & s);
300 
301  template <typename T, precision P>
302  GLM_FUNC_DECL tvec1<T, P> operator>>(T const & s, tvec1<T, P> const & v);
303 
304  template <typename T, precision P>
305  GLM_FUNC_DECL tvec1<T, P> operator>>(tvec1<T, P> const & v1, tvec1<T, P> const & v2);
306 
307  template <typename T, precision P>
308  GLM_FUNC_DECL tvec1<T, P> operator~(tvec1<T, P> const & v);
309 }//namespace glm
310 
311 #ifndef GLM_EXTERNAL_TEMPLATE
312 #include "type_vec1.inl"
313 #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)