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));
57 template<
template<length_t L,
typename T, qualifier Q>
class vec,
typename T, qualifier Q>
58 struct functor2<vec, 2, T, Q>
60 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)
62 return vec<2, T, Q>(Func(a.x, b.x), Func(a.y, b.y));
66 template<
template<length_t L,
typename T, qualifier Q>
class vec,
typename T, qualifier Q>
67 struct functor2<vec, 3, T, Q>
69 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)
71 return vec<3, T, Q>(Func(a.x, b.x), Func(a.y, b.y), Func(a.z, b.z));
75 template<
template<length_t L,
typename T, qualifier Q>
class vec,
typename T, qualifier Q>
76 struct functor2<vec, 4, T, Q>
78 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)
80 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));
84 template<
template<length_t L,
typename T, qualifier Q>
class vec, length_t L,
typename T, qualifier Q>
85 struct functor2_vec_sca{};
87 template<
template<length_t L,
typename T, qualifier Q>
class vec,
typename T, qualifier Q>
88 struct functor2_vec_sca<vec, 1, T, Q>
90 GLM_FUNC_QUALIFIER
static vec<1, T, Q> call(T (*Func) (T x, T y), vec<1, T, Q>
const& a, T b)
92 return vec<1, T, Q>(Func(a.x, b));
96 template<
template<length_t L,
typename T, qualifier Q>
class vec,
typename T, qualifier Q>
97 struct functor2_vec_sca<vec, 2, T, Q>
99 GLM_FUNC_QUALIFIER
static vec<2, T, Q> call(T (*Func) (T x, T y), vec<2, T, Q>
const& a, T b)
101 return vec<2, T, Q>(Func(a.x, b), Func(a.y, b));
105 template<
template<length_t L,
typename T, qualifier Q>
class vec,
typename T, qualifier Q>
106 struct functor2_vec_sca<vec, 3, T, Q>
108 GLM_FUNC_QUALIFIER
static vec<3, T, Q> call(T (*Func) (T x, T y), vec<3, T, Q>
const& a, T b)
110 return vec<3, T, Q>(Func(a.x, b), Func(a.y, b), Func(a.z, b));
114 template<
template<length_t L,
typename T, qualifier Q>
class vec,
typename T, qualifier Q>
115 struct functor2_vec_sca<vec, 4, T, Q>
117 GLM_FUNC_QUALIFIER
static vec<4, T, Q> call(T (*Func) (T x, T y), vec<4, T, Q>
const& a, T b)
119 return vec<4, T, Q>(Func(a.x, b), Func(a.y, b), Func(a.z, b), Func(a.w, b));
123 template<length_t L,
typename T, qualifier Q>
124 struct functor2_vec_int {};
126 template<
typename T, qualifier Q>
127 struct functor2_vec_int<1, T, Q>
129 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)
131 return vec<1, int, Q>(Func(a.x, b.x));
135 template<
typename T, qualifier Q>
136 struct functor2_vec_int<2, T, Q>
138 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)
140 return vec<2, int, Q>(Func(a.x, b.x), Func(a.y, b.y));
144 template<
typename T, qualifier Q>
145 struct functor2_vec_int<3, T, Q>
147 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)
149 return vec<3, int, Q>(Func(a.x, b.x), Func(a.y, b.y), Func(a.z, b.z));
153 template<
typename T, qualifier Q>
154 struct functor2_vec_int<4, T, Q>
156 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)
158 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));