- Main Page
- Related Pages
- Modules
- Files

- File List

type_vec1.hpp
Go to the documentation of this file.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29 #ifndef glm_core_type_gentype1
30 #define glm_core_type_gentype1
31
32 #include "type_vec.hpp"
33 #include "type_float.hpp"
34 #include "type_int.hpp"
35 #include "type_size.hpp"
36 #include "_swizzle.hpp"
37
38 namespace glm{
39 namespace detail
40 {
41 template <typename T> struct tref1;
42 template <typename T> struct tref2;
43 template <typename T> struct tref3;
44 template <typename T> struct tref4;
45 template <typename T> struct tvec1;
46 template <typename T> struct tvec2;
47 template <typename T> struct tvec3;
48 template <typename T> struct tvec4;
49
50 template <typename T>
51 struct tvec1
52 {
53 enum ctor{null};
54
55 typedef T value_type;
56 typedef std::size_t size_type;
57 typedef tvec1<T> type;
58 typedef tvec1<bool> bool_type;
59
60 GLM_FUNC_DECL GLM_CONSTEXPR size_type length() const;
61
63 // Data
64
65 # if(GLM_COMPONENT == GLM_COMPONENT_ONLY_XYZW)
66 value_type x;
67 # else//(GLM_COMPONENT == GLM_COMPONENT_GLSL_NAMES)
68 union {value_type x, r, s;};
69 # endif//GLM_COMPONENT
70
72 // Accesses
73
74 GLM_FUNC_DECL value_type & operator[](size_type i);
75 GLM_FUNC_DECL value_type const & operator[](size_type i) const;
76
78 // Implicit basic constructors
79
80 GLM_FUNC_DECL tvec1();
81 GLM_FUNC_DECL tvec1(tvec1<T> const & v);
82
84 // Explicit basic constructors
85
86 GLM_FUNC_DECL explicit tvec1(
87 ctor);
88 GLM_FUNC_DECL explicit tvec1(
89 value_type const & s);
90
92 // Swizzle constructors
93
94 GLM_FUNC_DECL tvec1(tref1<T> const & r);
95
97 // Convertion scalar constructors
98
100 template <typename U>
101 GLM_FUNC_DECL explicit tvec1(U const & s);
102
104 // Convertion vector constructors
105
107 template <typename U>
108 GLM_FUNC_DECL explicit tvec1(tvec2<U> const & v);
110 template <typename U>
111 GLM_FUNC_DECL explicit tvec1(tvec3<U> const & v);
113 template <typename U>
114 GLM_FUNC_DECL explicit tvec1(tvec4<U> const & v);
115
117 // Unary arithmetic operators
118
119 GLM_FUNC_DECL tvec1<T> & operator= (tvec1<T> const & v);
120 template <typename U>
121 GLM_FUNC_DECL tvec1<T> & operator= (tvec1<U> const & v);
122
123 template <typename U>
124 GLM_FUNC_DECL tvec1<T> & operator+=(U const & s);
125 template <typename U>
126 GLM_FUNC_DECL tvec1<T> & operator+=(tvec1<U> const & v);
127 template <typename U>
128 GLM_FUNC_DECL tvec1<T> & operator-=(U const & s);
129 template <typename U>
130 GLM_FUNC_DECL tvec1<T> & operator-=(tvec1<U> const & v);
131 template <typename U>
132 GLM_FUNC_DECL tvec1<T> & operator*=(U const & s);
133 template <typename U>
134 GLM_FUNC_DECL tvec1<T> & operator*=(tvec1<U> const & v);
135 template <typename U>
136 GLM_FUNC_DECL tvec1<T> & operator/=(U const & s);
137 template <typename U>
138 GLM_FUNC_DECL tvec1<T> & operator/=(tvec1<U> const & v);
139 GLM_FUNC_DECL tvec1<T> & operator++();
140 GLM_FUNC_DECL tvec1<T> & operator--();
141
143 // Unary bit operators
144
145 template <typename U>
146 GLM_FUNC_DECL tvec1<T> & operator%=(U const & s);
147 template <typename U>
148 GLM_FUNC_DECL tvec1<T> & operator%=(tvec1<U> const & v);
149 template <typename U>
150 GLM_FUNC_DECL tvec1<T> & operator&=(U const & s);
151 template <typename U>
152 GLM_FUNC_DECL tvec1<T> & operator&=(tvec1<U> const & v);
153 template <typename U>
154 GLM_FUNC_DECL tvec1<T> & operator|=(U const & s);
155 template <typename U>
156 GLM_FUNC_DECL tvec1<T> & operator|=(tvec1<U> const & v);
157 template <typename U>
158 GLM_FUNC_DECL tvec1<T> & operator^=(U const & s);
159 template <typename U>
160 GLM_FUNC_DECL tvec1<T> & operator^=(tvec1<U> const & v);
161 template <typename U>
162 GLM_FUNC_DECL tvec1<T> & operator<<=(U const & s);
163 template <typename U>
164 GLM_FUNC_DECL tvec1<T> & operator<<=(tvec1<U> const & v);
165 template <typename U>
166 GLM_FUNC_DECL tvec1<T> & operator>>=(U const & s);
167 template <typename U>
168 GLM_FUNC_DECL tvec1<T> & operator>>=(tvec1<U> const & v);
169
171 // Swizzle operators
172
173 GLM_FUNC_DECL value_type swizzle(comp X) const;
174 GLM_FUNC_DECL tvec2<T> swizzle(comp X, comp Y) const;
175 GLM_FUNC_DECL tvec3<T> swizzle(comp X, comp Y, comp Z) const;
176 GLM_FUNC_DECL tvec4<T> swizzle(comp X, comp Y, comp Z, comp W) const;
177 GLM_FUNC_DECL tref1<T> swizzle(comp X);
178 };
179
180 template <typename T>
181 struct tref1
182 {
183 GLM_FUNC_DECL tref1(T & x);
184 GLM_FUNC_DECL tref1(tref1<T> const & r);
185 GLM_FUNC_DECL tref1(tvec1<T> const & v);
186
187 GLM_FUNC_DECL tref1<T> & operator= (tref1<T> const & r);
188 GLM_FUNC_DECL tref1<T> & operator= (tvec1<T> const & v);
189
190 T& x;
191 };
192
193 GLM_DETAIL_IS_VECTOR(tvec1);
194
195 typedef detail::tvec1<highp_float> highp_vec1_t;
196 typedef detail::tvec1<mediump_float> mediump_vec1_t;
197 typedef detail::tvec1<lowp_float> lowp_vec1_t;
198 typedef detail::tvec1<highp_int> highp_ivec1_t;
199 typedef detail::tvec1<mediump_int> mediump_ivec1_t;
200 typedef detail::tvec1<lowp_int> lowp_ivec1_t;
201 typedef detail::tvec1<highp_uint> highp_uvec1_t;
202 typedef detail::tvec1<mediump_uint> mediump_uvec1_t;
203 typedef detail::tvec1<lowp_uint> lowp_uvec1_t;
204
205 }//namespace detail
206 }//namespace glm
207
208 #ifndef GLM_EXTERNAL_TEMPLATE
209 #include "type_vec1.inl"
210 #endif//GLM_EXTERNAL_TEMPLATE
211
212 #endif//glm_core_type_gentype1