_vectorize.hpp
Go to the documentation of this file.
1 
29 #pragma once
30 
31 #include "type_vec1.hpp"
32 #include "type_vec2.hpp"
33 #include "type_vec3.hpp"
34 #include "type_vec4.hpp"
35 
36 #define VECTORIZE1_VEC(func) \
37  template <typename T, precision P> \
38  GLM_FUNC_QUALIFIER detail::tvec1<T, P> func( \
39  detail::tvec1<T, P> const & v) \
40  { \
41  return detail::tvec1<T, P>( \
42  func(v.x)); \
43  }
44 
45 #define VECTORIZE2_VEC(func) \
46  template <typename T, precision P> \
47  GLM_FUNC_QUALIFIER detail::tvec2<T, P> func( \
48  detail::tvec2<T, P> const & v) \
49  { \
50  return detail::tvec2<T, P>( \
51  func(v.x), \
52  func(v.y)); \
53  }
54 
55 #define VECTORIZE3_VEC(func) \
56  template <typename T, precision P> \
57  GLM_FUNC_QUALIFIER detail::tvec3<T, P> func( \
58  detail::tvec3<T, P> const & v) \
59  { \
60  return detail::tvec3<T, P>( \
61  func(v.x), \
62  func(v.y), \
63  func(v.z)); \
64  }
65 
66 #define VECTORIZE4_VEC(func) \
67  template <typename T, precision P> \
68  GLM_FUNC_QUALIFIER detail::tvec4<T, P> func( \
69  detail::tvec4<T, P> const & v) \
70  { \
71  return detail::tvec4<T, P>( \
72  func(v.x), \
73  func(v.y), \
74  func(v.z), \
75  func(v.w)); \
76  }
77 
78 #define VECTORIZE_VEC(func) \
79  VECTORIZE1_VEC(func) \
80  VECTORIZE2_VEC(func) \
81  VECTORIZE3_VEC(func) \
82  VECTORIZE4_VEC(func)
83 
84 #define VECTORIZE1_VEC_SCA(func) \
85  template <typename T, precision P> \
86  GLM_FUNC_QUALIFIER detail::tvec1<T, P> func \
87  ( \
88  detail::tvec1<T, P> const & x, \
89  typename detail::tvec1<T, P>::value_type const & y \
90  ) \
91  { \
92  return detail::tvec1<T, P>( \
93  func(x.x, y)); \
94  }
95 
96 #define VECTORIZE2_VEC_SCA(func) \
97  template <typename T, precision P> \
98  GLM_FUNC_QUALIFIER detail::tvec2<T, P> func \
99  ( \
100  detail::tvec2<T, P> const & x, \
101  typename detail::tvec2<T, P>::value_type const & y \
102  ) \
103  { \
104  return detail::tvec2<T, P>( \
105  func(x.x, y), \
106  func(x.y, y)); \
107  }
108 
109 #define VECTORIZE3_VEC_SCA(func) \
110  template <typename T, precision P> \
111  GLM_FUNC_QUALIFIER detail::tvec3<T, P> func \
112  ( \
113  detail::tvec3<T, P> const & x, \
114  typename detail::tvec3<T, P>::value_type const & y \
115  ) \
116  { \
117  return detail::tvec3<T, P>( \
118  func(x.x, y), \
119  func(x.y, y), \
120  func(x.z, y)); \
121  }
122 
123 #define VECTORIZE4_VEC_SCA(func) \
124  template <typename T, precision P> \
125  GLM_FUNC_QUALIFIER detail::tvec4<T, P> func \
126  ( \
127  detail::tvec4<T, P> const & x, \
128  typename detail::tvec4<T, P>::value_type const & y \
129  ) \
130  { \
131  return detail::tvec4<T, P>( \
132  func(x.x, y), \
133  func(x.y, y), \
134  func(x.z, y), \
135  func(x.w, y)); \
136  }
137 
138 #define VECTORIZE_VEC_SCA(func) \
139  VECTORIZE1_VEC_SCA(func) \
140  VECTORIZE2_VEC_SCA(func) \
141  VECTORIZE3_VEC_SCA(func) \
142  VECTORIZE4_VEC_SCA(func)
143 
144 #define VECTORIZE1_VEC_VEC(func) \
145  template <typename T, precision P> \
146  GLM_FUNC_QUALIFIER detail::tvec1<T, P> func \
147  ( \
148  detail::tvec1<T, P> const & x, \
149  detail::tvec1<T, P> const & y \
150  ) \
151  { \
152  return detail::tvec1<T, P>( \
153  func(x.x, y.x)); \
154  }
155 
156 #define VECTORIZE2_VEC_VEC(func) \
157  template <typename T, precision P> \
158  GLM_FUNC_QUALIFIER detail::tvec2<T, P> func \
159  ( \
160  detail::tvec2<T, P> const & x, \
161  detail::tvec2<T, P> const & y \
162  ) \
163  { \
164  return detail::tvec2<T, P>( \
165  func(x.x, y.x), \
166  func(x.y, y.y)); \
167  }
168 
169 #define VECTORIZE3_VEC_VEC(func) \
170  template <typename T, precision P> \
171  GLM_FUNC_QUALIFIER detail::tvec3<T, P> func \
172  ( \
173  detail::tvec3<T, P> const & x, \
174  detail::tvec3<T, P> const & y \
175  ) \
176  { \
177  return detail::tvec3<T, P>( \
178  func(x.x, y.x), \
179  func(x.y, y.y), \
180  func(x.z, y.z)); \
181  }
182 
183 #define VECTORIZE4_VEC_VEC(func) \
184  template <typename T, precision P> \
185  GLM_FUNC_QUALIFIER detail::tvec4<T, P> func \
186  ( \
187  detail::tvec4<T, P> const & x, \
188  detail::tvec4<T, P> const & y \
189  ) \
190  { \
191  return detail::tvec4<T, P>( \
192  func(x.x, y.x), \
193  func(x.y, y.y), \
194  func(x.z, y.z), \
195  func(x.w, y.w)); \
196  }
197 
198 #define VECTORIZE_VEC_VEC(func) \
199  VECTORIZE1_VEC_VEC(func) \
200  VECTORIZE2_VEC_VEC(func) \
201  VECTORIZE3_VEC_VEC(func) \
202  VECTORIZE4_VEC_VEC(func)
203 
204 namespace glm{
205 namespace detail
206 {
207  template<bool C>
208  struct If
209  {
210  template<typename F, typename T>
211  static GLM_FUNC_QUALIFIER T apply(F functor, const T& val)
212  {
213  return functor(val);
214  }
215  };
216 
217  template<>
218  struct If<false>
219  {
220  template<typename F, typename T>
221  static GLM_FUNC_QUALIFIER T apply(F, const T& val)
222  {
223  return val;
224  }
225  };
226 }//namespace detail
227 }//namespace glm
static GLM_FUNC_QUALIFIER T apply(F functor, const T &val)
Definition: _vectorize.hpp:211
static GLM_FUNC_QUALIFIER T apply(F, const T &val)
Definition: _vectorize.hpp:221
#define false
Definition: ConvertUTF.c:56
#define GLM_FUNC_QUALIFIER
Definition: setup.hpp:729


rtabmap
Author(s): Mathieu Labbe
autogenerated on Wed Jun 5 2019 22:41:30