GLM
0.9.5
Main Page
Related Pages
Modules
Namespaces
Files
File List
Users
Groove
Documents
GitHub
glm
glm
detail
_vectorize.hpp
1
29
#ifndef GLM_CORE_DETAIL_INCLUDED
30
#define GLM_CORE_DETAIL_INCLUDED
31
32
#include "type_vec2.hpp"
33
#include "type_vec3.hpp"
34
#include "type_vec4.hpp"
35
36
#define VECTORIZE2_VEC(func) \
37
template <typename T, precision P> \
38
GLM_FUNC_QUALIFIER detail::tvec2<T, P> func( \
39
detail::tvec2<T, P> const & v) \
40
{ \
41
return detail::tvec2<T, P>( \
42
func(v.x), \
43
func(v.y)); \
44
}
45
46
#define VECTORIZE3_VEC(func) \
47
template <typename T, precision P> \
48
GLM_FUNC_QUALIFIER detail::tvec3<T, P> func( \
49
detail::tvec3<T, P> const & v) \
50
{ \
51
return detail::tvec3<T, P>( \
52
func(v.x), \
53
func(v.y), \
54
func(v.z)); \
55
}
56
57
#define VECTORIZE4_VEC(func) \
58
template <typename T, precision P> \
59
GLM_FUNC_QUALIFIER detail::tvec4<T, P> func( \
60
detail::tvec4<T, P> const & v) \
61
{ \
62
return detail::tvec4<T, P>( \
63
func(v.x), \
64
func(v.y), \
65
func(v.z), \
66
func(v.w)); \
67
}
68
69
#define VECTORIZE_VEC(func) \
70
VECTORIZE2_VEC(func) \
71
VECTORIZE3_VEC(func) \
72
VECTORIZE4_VEC(func)
73
74
#define VECTORIZE2_VEC_SCA(func) \
75
template <typename T, precision P> \
76
GLM_FUNC_QUALIFIER detail::tvec2<T, P> func \
77
( \
78
detail::tvec2<T, P> const & x, \
79
T const & y \
80
) \
81
{ \
82
return detail::tvec2<T, P>( \
83
func(x.x, y), \
84
func(x.y, y)); \
85
}
86
87
#define VECTORIZE3_VEC_SCA(func) \
88
template <typename T, precision P> \
89
GLM_FUNC_QUALIFIER detail::tvec3<T, P> func \
90
( \
91
detail::tvec3<T, P> const & x, \
92
T const & y \
93
) \
94
{ \
95
return detail::tvec3<T, P>( \
96
func(x.x, y), \
97
func(x.y, y), \
98
func(x.z, y)); \
99
}
100
101
#define VECTORIZE4_VEC_SCA(func) \
102
template <typename T, precision P> \
103
GLM_FUNC_QUALIFIER detail::tvec4<T, P> func \
104
( \
105
detail::tvec4<T, P> const & x, \
106
T const & y \
107
) \
108
{ \
109
return detail::tvec4<T, P>( \
110
func(x.x, y), \
111
func(x.y, y), \
112
func(x.z, y), \
113
func(x.w, y)); \
114
}
115
116
#define VECTORIZE_VEC_SCA(func) \
117
VECTORIZE2_VEC_SCA(func) \
118
VECTORIZE3_VEC_SCA(func) \
119
VECTORIZE4_VEC_SCA(func)
120
121
#define VECTORIZE2_VEC_VEC(func) \
122
template <typename T, precision P> \
123
GLM_FUNC_QUALIFIER detail::tvec2<T, P> func \
124
( \
125
detail::tvec2<T, P> const & x, \
126
detail::tvec2<T, P> const & y \
127
) \
128
{ \
129
return detail::tvec2<T, P>( \
130
func(x.x, y.x), \
131
func(x.y, y.y)); \
132
}
133
134
#define VECTORIZE3_VEC_VEC(func) \
135
template <typename T, precision P> \
136
GLM_FUNC_QUALIFIER detail::tvec3<T, P> func \
137
( \
138
detail::tvec3<T, P> const & x, \
139
detail::tvec3<T, P> const & y \
140
) \
141
{ \
142
return detail::tvec3<T, P>( \
143
func(x.x, y.x), \
144
func(x.y, y.y), \
145
func(x.z, y.z)); \
146
}
147
148
#define VECTORIZE4_VEC_VEC(func) \
149
template <typename T, precision P> \
150
GLM_FUNC_QUALIFIER detail::tvec4<T, P> func \
151
( \
152
detail::tvec4<T, P> const & x, \
153
detail::tvec4<T, P> const & y \
154
) \
155
{ \
156
return detail::tvec4<T, P>( \
157
func(x.x, y.x), \
158
func(x.y, y.y), \
159
func(x.z, y.z), \
160
func(x.w, y.w)); \
161
}
162
163
#define VECTORIZE_VEC_VEC(func) \
164
VECTORIZE2_VEC_VEC(func) \
165
VECTORIZE3_VEC_VEC(func) \
166
VECTORIZE4_VEC_VEC(func)
167
168
namespace
glm{
169
namespace
detail
170
{
171
template
<
bool
C>
172
struct
If
173
{
174
template
<
typename
F,
typename
T>
175
static
GLM_FUNC_QUALIFIER T apply(F functor,
const
T& val)
176
{
177
return
functor(val);
178
}
179
};
180
181
template
<>
182
struct
If<false>
183
{
184
template
<
typename
F,
typename
T>
185
static
GLM_FUNC_QUALIFIER T apply(F,
const
T& val)
186
{
187
return
val;
188
}
189
};
190
}
//namespace detail
191
}
//namespace glm
192
193
#endif//GLM_CORE_DETAIL_INCLUDED
Generated by
1.8.5