GLM: type_vec2.hpp Source File

GLM 0.9.5

- Main Page
- Related Pages
- Modules
- Namespaces
- Files

- File List

type_vec2.hpp
1
29 #ifndef glm_core_type_gentype2
30 #define glm_core_type_gentype2
31
32 //#include "../fwd.hpp"
33 #include "type_vec.hpp"
34 #ifdef GLM_SWIZZLE
35 # if GLM_HAS_ANONYMOUS_UNION
36 # include "_swizzle.hpp"
37 # else
38 # include "_swizzle_func.hpp"
39 # endif
40 #endif //GLM_SWIZZLE
41 #if(GLM_HAS_INITIALIZER_LISTS)
42 # include <initializer_list>
43 #endif //GLM_HAS_INITIALIZER_LISTS
44 #include <cstddef>
45
46 namespace glm{
47 namespace detail
48 {
49 template <typename T, precision P>
50 struct tvec2
51 {
53 // Implementation detail
54
55 enum ctor{_null};
56
57 typedef tvec2<T, P> type;
58 typedef tvec2<bool, P> bool_type;
59 typedef T value_type;
60 typedef int size_type;
61
63 // Helper
64
65 GLM_FUNC_DECL GLM_CONSTEXPR length_t length() const;
66
68 // Data
69
70 # if(GLM_HAS_ANONYMOUS_UNION && defined(GLM_SWIZZLE))
71 union
72 {
73 struct{ T x, y; };
74 struct{ T r, g; };
75 struct{ T s, t; };
76
77 _GLM_SWIZZLE2_2_MEMBERS(T, P, tvec2, x, y)
78 _GLM_SWIZZLE2_2_MEMBERS(T, P, tvec2, r, g)
79 _GLM_SWIZZLE2_2_MEMBERS(T, P, tvec2, s, t)
80 _GLM_SWIZZLE2_3_MEMBERS(T, P, tvec3, x, y)
81 _GLM_SWIZZLE2_3_MEMBERS(T, P, tvec3, r, g)
82 _GLM_SWIZZLE2_3_MEMBERS(T, P, tvec3, s, t)
83 _GLM_SWIZZLE2_4_MEMBERS(T, P, tvec4, x, y)
84 _GLM_SWIZZLE2_4_MEMBERS(T, P, tvec4, r, g)
85 _GLM_SWIZZLE2_4_MEMBERS(T, P, tvec4, s, t)
86 };
87 # else
88 union {T x, r, s;};
89 union {T y, g, t;};
90
91 # ifdef GLM_SWIZZLE
92 GLM_SWIZZLE_GEN_VEC_FROM_VEC2(T, P, detail::tvec2, detail::tvec2, detail::tvec3, detail::tvec4)
93 # endif
94 # endif
95
97 // Accesses
98
99 GLM_FUNC_DECL T & operator[](length_t i);
100 GLM_FUNC_DECL T const & operator[](length_t i) const;
101
103 // Implicit basic constructors
104
105 GLM_FUNC_DECL tvec2();
106 GLM_FUNC_DECL tvec2(tvec2<T, P> const & v);
107 template <precision Q>
108 GLM_FUNC_DECL tvec2(tvec2<T, Q> const & v);
109
110 #if(GLM_HAS_INITIALIZER_LISTS)
111 template <typename U>
112 GLM_FUNC_DECL tvec2(std::initializer_list<U> const & v);
113 #endif//GLM_HAS_INITIALIZER_LISTS
114
116 // Explicit basic constructors
117
118 GLM_FUNC_DECL explicit tvec2(
119 ctor);
120 GLM_FUNC_DECL explicit tvec2(
121 T const & s);
122 GLM_FUNC_DECL explicit tvec2(
123 T const & s1,
124 T const & s2);
125
127 // Swizzle constructors
128
129 # if(GLM_HAS_ANONYMOUS_UNION && defined(GLM_SWIZZLE))
130 template <int E0, int E1>
131 GLM_FUNC_DECL tvec2(_swizzle<2,T, P, tvec2<T, P>, E0, E1,-1,-2> const & that)
132 {
133 *this = that();
134 }
135 # endif//(GLM_HAS_ANONYMOUS_UNION && defined(GLM_SWIZZLE))
136
138 // Conversion constructors
139
141 template <typename U, typename V>
142 GLM_FUNC_DECL explicit tvec2(
143 U const & x,
144 V const & y);
145
147 // Conversion vector constructors
148
150 template <typename U, precision Q>
151 GLM_FUNC_DECL explicit tvec2(tvec2<U, Q> const & v);
153 template <typename U, precision Q>
154 GLM_FUNC_DECL explicit tvec2(tvec3<U, Q> const & v);
156 template <typename U, precision Q>
157 GLM_FUNC_DECL explicit tvec2(tvec4<U, Q> const & v);
158
160 // Unary arithmetic operators
161
162 GLM_FUNC_DECL tvec2<T, P> & operator= (tvec2<T, P> const & v);
163 template <typename U>
164 GLM_FUNC_DECL tvec2<T, P> & operator= (tvec2<U, P> const & v);
165
166 template <typename U>
167 GLM_FUNC_DECL tvec2<T, P> & operator+=(U s);
168 template <typename U>
169 GLM_FUNC_DECL tvec2<T, P> & operator+=(tvec2<U, P> const & v);
170 template <typename U>
171 GLM_FUNC_DECL tvec2<T, P> & operator-=(U s);
172 template <typename U>
173 GLM_FUNC_DECL tvec2<T, P> & operator-=(tvec2<U, P> const & v);
174 template <typename U>
175 GLM_FUNC_DECL tvec2<T, P> & operator*=(U s);
176 template <typename U>
177 GLM_FUNC_DECL tvec2<T, P> & operator*=(tvec2<U, P> const & v);
178 template <typename U>
179 GLM_FUNC_DECL tvec2<T, P> & operator/=(U s);
180 template <typename U>
181 GLM_FUNC_DECL tvec2<T, P> & operator/=(tvec2<U, P> const & v);
182
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
192 // Unary bit operators
193
194 template <typename U>
195 GLM_FUNC_DECL tvec2<T, P> & operator%= (U s);
196 template <typename U>
197 GLM_FUNC_DECL tvec2<T, P> & operator%= (tvec2<U, P> const & v);
198 template <typename U>
199 GLM_FUNC_DECL tvec2<T, P> & operator&= (U s);
200 template <typename U>
201 GLM_FUNC_DECL tvec2<T, P> & operator&= (tvec2<U, P> const & v);
202 template <typename U>
203 GLM_FUNC_DECL tvec2<T, P> & operator|= (U s);
204 template <typename U>
205 GLM_FUNC_DECL tvec2<T, P> & operator|= (tvec2<U, P> const & v);
206 template <typename U>
207 GLM_FUNC_DECL tvec2<T, P> & operator^= (U s);
208 template <typename U>
209 GLM_FUNC_DECL tvec2<T, P> & operator^= (tvec2<U, P> const & v);
210 template <typename U>
211 GLM_FUNC_DECL tvec2<T, P> & operator<<=(U s);
212 template <typename U>
213 GLM_FUNC_DECL tvec2<T, P> & operator<<=(tvec2<U, P> const & v);
214 template <typename U>
215 GLM_FUNC_DECL tvec2<T, P> & operator>>=(U s);
216 template <typename U>
217 GLM_FUNC_DECL tvec2<T, P> & operator>>=(tvec2<U, P> const & v);
218 };
219
220 template <typename T, precision P>
221 GLM_FUNC_DECL tvec2<T, P> operator+(tvec2<T, P> const & v, T const & s);
222
223 template <typename T, precision P>
224 GLM_FUNC_DECL tvec2<T, P> operator+(T const & s, tvec2<T, P> const & v);
225
226 template <typename T, precision P>
227 GLM_FUNC_DECL tvec2<T, P> operator+(tvec2<T, P> const & v1, tvec2<T, P> const & v2);
228
229 template <typename T, precision P>
230 GLM_FUNC_DECL tvec2<T, P> operator-(tvec2<T, P> const & v, T const & s);
231
232 template <typename T, precision P>
233 GLM_FUNC_DECL tvec2<T, P> operator-(T const & s, tvec2<T, P> const & v);
234
235 template <typename T, precision P>
236 GLM_FUNC_DECL tvec2<T, P> operator- (tvec2<T, P> const & v1, tvec2<T, P> const & v2);
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*(T const & s, tvec2<T, P> const & v);
243
244 template <typename T, precision P>
245 GLM_FUNC_DECL tvec2<T, P> operator*(tvec2<T, P> const & v1, tvec2<T, P> const & v2);
246
247 template <typename T, precision P>
248 GLM_FUNC_DECL tvec2<T, P> operator/(tvec2<T, P> const & v, T const & s);
249
250 template <typename T, precision P>
251 GLM_FUNC_DECL tvec2<T, P> operator/(T const & s, tvec2<T, P> const & v);
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);
258
259 template <typename T, precision P>
260 GLM_FUNC_DECL tvec2<T, P> operator%(tvec2<T, P> const & v, T const & s);
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%(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&(T const & s, tvec2<T, P> const & v);
273
274 template <typename T, precision P>
275 GLM_FUNC_DECL tvec2<T, P> operator&(tvec2<T, P> const & v1, tvec2<T, P> const & v2);
276
277 template <typename T, precision P>
278 GLM_FUNC_DECL tvec2<T, P> operator|(tvec2<T, P> const & v, T const & s);
279
280 template <typename T, precision P>
281 GLM_FUNC_DECL tvec2<T, P> operator|(T const & s, tvec2<T, P> const & v);
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^(T const & s, tvec2<T, P> const & v);
291
292 template <typename T, precision P>
293 GLM_FUNC_DECL tvec2<T, P> operator^(tvec2<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 & v, T const & s);
297
298 template <typename T, precision P>
299 GLM_FUNC_DECL tvec2<T, P> operator<<(T const & s, tvec2<T, P> const & v);
300
301 template <typename T, precision P>
302 GLM_FUNC_DECL tvec2<T, P> operator<<(tvec2<T, P> const & v1, tvec2<T, P> const & v2);
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>>(T const & s, tvec2<T, P> const & v);
309
310 template <typename T, precision P>
311 GLM_FUNC_DECL tvec2<T, P> operator>>(tvec2<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 & v);
315
316 }//namespace detail
317 }//namespace glm
318
319 #ifndef GLM_EXTERNAL_TEMPLATE
320 #include "type_vec2.inl"
321 #endif//GLM_EXTERNAL_TEMPLATE
322
323 #endif//glm_core_type_gentype2
glm::length
GLM_FUNC_DECL genType::value_type length(genType const &x)
Returns the length of x, i.e., sqrt(x * x).