6 template<
template<length_t L,
typename T, qualifier Q>
class vec, length_t L,
typename R,
typename T, qualifier Q>
9 template<
template<length_t L,
typename T, qualifier Q>
class vec,
typename R,
typename T, qualifier Q>
10 struct functor1<vec, 1, R, T, Q>
12 GLM_FUNC_QUALIFIER GLM_CONSTEXPR
static vec<1, R, Q> call(R (*Func) (T x), vec<1, T, Q>
const& v)
14 return vec<1, R, Q>(Func(v.x));
18 template<
template<length_t L,
typename T, qualifier Q>
class vec,
typename R,
typename T, qualifier Q>
19 struct functor1<vec, 2, R, T, Q>
21 GLM_FUNC_QUALIFIER GLM_CONSTEXPR
static vec<2, R, Q> call(R (*Func) (T x), vec<2, T, Q>
const& v)
23 return vec<2, R, Q>(Func(v.x), Func(v.y));
27 template<
template<length_t L,
typename T, qualifier Q>
class vec,
typename R,
typename T, qualifier Q>
28 struct functor1<vec, 3, R, T, Q>
30 GLM_FUNC_QUALIFIER GLM_CONSTEXPR
static vec<3, R, Q> call(R (*Func) (T x), vec<3, T, Q>
const& v)
32 return vec<3, R, Q>(Func(v.x), Func(v.y), Func(v.z));
36 template<
template<length_t L,
typename T, qualifier Q>
class vec,
typename R,
typename T, qualifier Q>
37 struct functor1<vec, 4, R, T, Q>
39 GLM_FUNC_QUALIFIER GLM_CONSTEXPR
static vec<4, R, Q> call(R (*Func) (T x), vec<4, T, Q>
const& v)
41 return vec<4, R, Q>(Func(v.x), Func(v.y), Func(v.z), Func(v.w));
45 template<
template<length_t L,
typename T, qualifier Q>
class vec, length_t L,
typename T, qualifier Q>
48 template<
template<length_t L,
typename T, qualifier Q>
class vec,
typename T, qualifier Q>
49 struct functor2<vec, 1, T, Q>
51 GLM_FUNC_QUALIFIER
static vec<1, T, Q> call(T (*Func) (T x, T y), vec<1, T, Q>
const& a, vec<1, T, Q>
const& b)
53 return vec<1, T, Q>(Func(a.x, b.x));
56 template<
typename Fct>
57 GLM_FUNC_QUALIFIER GLM_CONSTEXPR
static vec<1, T, Q> call(Fct Func, vec<1, T, Q>
const& a, vec<1, T, Q>
const& b)
59 return vec<1, T, Q>(Func(a.x, b.x));
63 template<
template<length_t L,
typename T, qualifier Q>
class vec,
typename T, qualifier Q>
64 struct functor2<vec, 2, T, Q>
66 GLM_FUNC_QUALIFIER
static vec<2, T, Q> call(T (*Func) (T x, T y), vec<2, T, Q>
const& a, vec<2, T, Q>
const& b)
68 return vec<2, T, Q>(Func(a.x, b.x), Func(a.y, b.y));
71 template<
typename Fct>
72 GLM_FUNC_QUALIFIER GLM_CONSTEXPR
static vec<2, T, Q> call(Fct Func, vec<2, T, Q>
const& a, vec<2, T, Q>
const& b)
74 return vec<2, T, Q>(Func(a.x, b.x), Func(a.y, b.y));
78 template<
template<length_t L,
typename T, qualifier Q>
class vec,
typename T, qualifier Q>
79 struct functor2<vec, 3, T, Q>
81 GLM_FUNC_QUALIFIER
static vec<3, T, Q> call(T (*Func) (T x, T y), vec<3, T, Q>
const& a, vec<3, T, Q>
const& b)
83 return vec<3, T, Q>(Func(a.x, b.x), Func(a.y, b.y), Func(a.z, b.z));
87 GLM_FUNC_QUALIFIER GLM_CONSTEXPR
static vec<3, T, Q> call(Fct Func, vec<3, T, Q>
const& a, vec<3, T, Q>
const& b)
89 return vec<3, T, Q>(Func(a.x, b.x), Func(a.y, b.y), Func(a.z, b.z));
93 template<
template<length_t L,
typename T, qualifier Q>
class vec,
typename T, qualifier Q>
94 struct functor2<vec, 4, T, Q>
96 GLM_FUNC_QUALIFIER
static vec<4, T, Q> call(T (*Func) (T x, T y), vec<4, T, Q>
const& a, vec<4, T, Q>
const& b)
98 return vec<4, T, Q>(Func(a.x, b.x), Func(a.y, b.y), Func(a.z, b.z), Func(a.w, b.w));
102 GLM_FUNC_QUALIFIER GLM_CONSTEXPR
static vec<4, T, Q> call(Fct Func, vec<4, T, Q>
const& a, vec<4, T, Q>
const& b)
104 return vec<4, T, Q>(Func(a.x, b.x), Func(a.y, b.y), Func(a.z, b.z), Func(a.w, b.w));
108 template<
template<length_t L,
typename T, qualifier Q>
class vec, length_t L,
typename T, qualifier Q>
109 struct functor2_vec_sca{};
111 template<
template<length_t L,
typename T, qualifier Q>
class vec,
typename T, qualifier Q>
112 struct functor2_vec_sca<vec, 1, T, Q>
114 GLM_FUNC_QUALIFIER
static vec<1, T, Q> call(T (*Func) (T x, T y), vec<1, T, Q>
const& a, T b)
116 return vec<1, T, Q>(Func(a.x, b));
119 GLM_FUNC_QUALIFIER GLM_CONSTEXPR
static vec<1, T, Q> call(Fct Func, vec<1, T, Q>
const& a, T b)
121 return vec<1, T, Q>(Func(a.x, b));
125 template<
template<length_t L,
typename T, qualifier Q>
class vec,
typename T, qualifier Q>
126 struct functor2_vec_sca<vec, 2, T, Q>
128 GLM_FUNC_QUALIFIER
static vec<2, T, Q> call(T (*Func) (T x, T y), vec<2, T, Q>
const& a, T b)
130 return vec<2, T, Q>(Func(a.x, b), Func(a.y, b));
134 GLM_FUNC_QUALIFIER GLM_CONSTEXPR
static vec<2, T, Q> call(Fct Func, vec<2, T, Q>
const& a, T b)
136 return vec<2, T, Q>(Func(a.x, b), Func(a.y, b));
140 template<
template<length_t L,
typename T, qualifier Q>
class vec,
typename T, qualifier Q>
141 struct functor2_vec_sca<vec, 3, T, Q>
143 GLM_FUNC_QUALIFIER
static vec<3, T, Q> call(T (*Func) (T x, T y), vec<3, T, Q>
const& a, T b)
145 return vec<3, T, Q>(Func(a.x, b), Func(a.y, b), Func(a.z, b));
149 GLM_FUNC_QUALIFIER GLM_CONSTEXPR
static vec<3, T, Q> call(Fct Func, vec<3, T, Q>
const& a, T b)
151 return vec<3, T, Q>(Func(a.x, b), Func(a.y, b), Func(a.z, b));
155 template<
template<length_t L,
typename T, qualifier Q>
class vec,
typename T, qualifier Q>
156 struct functor2_vec_sca<vec, 4, T, Q>
158 GLM_FUNC_QUALIFIER
static vec<4, T, Q> call(T (*Func) (T x, T y), vec<4, T, Q>
const& a, T b)
160 return vec<4, T, Q>(Func(a.x, b), Func(a.y, b), Func(a.z, b), Func(a.w, b));
163 GLM_FUNC_QUALIFIER GLM_CONSTEXPR
static vec<4, T, Q> call(Fct Func, vec<4, T, Q>
const& a, T b)
165 return vec<4, T, Q>(Func(a.x, b), Func(a.y, b), Func(a.z, b), Func(a.w, b));
169 template<length_t L,
typename T, qualifier Q>
170 struct functor2_vec_int {};
172 template<
typename T, qualifier Q>
173 struct functor2_vec_int<1, T, Q>
175 GLM_FUNC_QUALIFIER
static vec<1, int, Q> call(
int (*Func) (T x,
int y), vec<1, T, Q>
const& a, vec<1, int, Q>
const& b)
177 return vec<1, int, Q>(Func(a.x, b.x));
181 GLM_FUNC_QUALIFIER GLM_CONSTEXPR
static vec<1, int, Q> call(Fct Func, vec<1, T, Q>
const& a, vec<1, int, Q>
const& b)
183 return vec<1, int, Q>(Func(a.x, b.x));
187 template<
typename T, qualifier Q>
188 struct functor2_vec_int<2, T, Q>
190 GLM_FUNC_QUALIFIER
static vec<2, int, Q> call(
int (*Func) (T x,
int y), vec<2, T, Q>
const& a, vec<2, int, Q>
const& b)
192 return vec<2, int, Q>(Func(a.x, b.x), Func(a.y, b.y));
195 GLM_FUNC_QUALIFIER GLM_CONSTEXPR
static vec<2, int, Q> call(Fct Func, vec<2, T, Q>
const& a, vec<2, int, Q>
const& b)
197 return vec<2, int, Q>(Func(a.x, b.x), Func(a.y, b.y));
201 template<
typename T, qualifier Q>
202 struct functor2_vec_int<3, T, Q>
204 GLM_FUNC_QUALIFIER
static vec<3, int, Q> call(
int (*Func) (T x,
int y), vec<3, T, Q>
const& a, vec<3, int, Q>
const& b)
206 return vec<3, int, Q>(Func(a.x, b.x), Func(a.y, b.y), Func(a.z, b.z));
209 GLM_FUNC_QUALIFIER GLM_CONSTEXPR
static vec<3, int, Q> call(Fct Func, vec<3, T, Q>
const& a, vec<3, int, Q>
const& b)
211 return vec<3, int, Q>(Func(a.x, b.x), Func(a.y, b.y), Func(a.z, b.z));
215 template<
typename T, qualifier Q>
216 struct functor2_vec_int<4, T, Q>
218 GLM_FUNC_QUALIFIER
static vec<4, int, Q> call(
int (*Func) (T x,
int y), vec<4, T, Q>
const& a, vec<4, int, Q>
const& b)
220 return vec<4, int, Q>(Func(a.x, b.x), Func(a.y, b.y), Func(a.z, b.z), Func(a.w, b.w));
224 GLM_FUNC_QUALIFIER GLM_CONSTEXPR
static vec<4, int, Q> call(Fct Func, vec<4, T, Q>
const& a, vec<4, int, Q>
const& b)
226 return vec<4, int, Q>(Func(a.x, b.x), Func(a.y, b.y), Func(a.z, b.z), Func(a.w, b.w));