170RVEC_DECLARE_INTEGER_TEMPLATE(
unsigned char)
171RVEC_DECLARE_INTEGER_TEMPLATE(
unsigned short)
172RVEC_DECLARE_INTEGER_TEMPLATE(
unsigned int)
173RVEC_DECLARE_INTEGER_TEMPLATE(
unsigned long)
174RVEC_DECLARE_INTEGER_TEMPLATE(
unsigned long long)
176RVEC_DECLARE_FLOAT_TEMPLATE(
float)
177RVEC_DECLARE_FLOAT_TEMPLATE(
double)
179#define RVEC_DECLARE_UNARY_FUNCTION(T, NAME, FUNC) \
180 template RVec<PromoteType<T>> NAME(const RVec<T> &);
182#define RVEC_DECLARE_STD_UNARY_FUNCTION(T, F) RVEC_DECLARE_UNARY_FUNCTION(T, F, ::std::F)
184#define RVEC_DECLARE_BINARY_FUNCTION(T0, T1, NAME, FUNC) \
185 template RVec<PromoteTypes<T0, T1>> NAME(const RVec<T0> &v, const T1 &y); \
186 template RVec<PromoteTypes<T0, T1>> NAME(const T0 &x, const RVec<T1> &v); \
187 template RVec<PromoteTypes<T0, T1>> NAME(const RVec<T0> &v0, const RVec<T1> &v1);
189#define RVEC_DECLARE_STD_BINARY_FUNCTION(T, F) RVEC_DECLARE_BINARY_FUNCTION(T, T, F, ::std::F)
191#define RVEC_DECLARE_STD_FUNCTIONS(T) \
192 RVEC_DECLARE_STD_UNARY_FUNCTION(T, abs) \
193 RVEC_DECLARE_STD_BINARY_FUNCTION(T, fdim) \
194 RVEC_DECLARE_STD_BINARY_FUNCTION(T, fmod) \
195 RVEC_DECLARE_STD_BINARY_FUNCTION(T, remainder) \
196 RVEC_DECLARE_STD_UNARY_FUNCTION(T, exp) \
197 RVEC_DECLARE_STD_UNARY_FUNCTION(T, exp2) \
198 RVEC_DECLARE_STD_UNARY_FUNCTION(T, expm1) \
199 RVEC_DECLARE_STD_UNARY_FUNCTION(T, log) \
200 RVEC_DECLARE_STD_UNARY_FUNCTION(T, log10) \
201 RVEC_DECLARE_STD_UNARY_FUNCTION(T, log2) \
202 RVEC_DECLARE_STD_UNARY_FUNCTION(T, log1p) \
203 RVEC_DECLARE_STD_BINARY_FUNCTION(T, pow) \
204 RVEC_DECLARE_STD_UNARY_FUNCTION(T, sqrt) \
205 RVEC_DECLARE_STD_UNARY_FUNCTION(T, cbrt) \
206 RVEC_DECLARE_STD_BINARY_FUNCTION(T, hypot) \
207 RVEC_DECLARE_STD_UNARY_FUNCTION(T, sin) \
208 RVEC_DECLARE_STD_UNARY_FUNCTION(T, cos) \
209 RVEC_DECLARE_STD_UNARY_FUNCTION(T, tan) \
210 RVEC_DECLARE_STD_UNARY_FUNCTION(T, asin) \
211 RVEC_DECLARE_STD_UNARY_FUNCTION(T, acos) \
212 RVEC_DECLARE_STD_UNARY_FUNCTION(T, atan) \
213 RVEC_DECLARE_STD_BINARY_FUNCTION(T, atan2) \
214 RVEC_DECLARE_STD_UNARY_FUNCTION(T, sinh) \
215 RVEC_DECLARE_STD_UNARY_FUNCTION(T, cosh) \
216 RVEC_DECLARE_STD_UNARY_FUNCTION(T, tanh) \
217 RVEC_DECLARE_STD_UNARY_FUNCTION(T, asinh) \
218 RVEC_DECLARE_STD_UNARY_FUNCTION(T, acosh) \
219 RVEC_DECLARE_STD_UNARY_FUNCTION(T, atanh) \
220 RVEC_DECLARE_STD_UNARY_FUNCTION(T, floor) \
221 RVEC_DECLARE_STD_UNARY_FUNCTION(T, ceil) \
222 RVEC_DECLARE_STD_UNARY_FUNCTION(T, trunc) \
223 RVEC_DECLARE_STD_UNARY_FUNCTION(T, round) \
224 RVEC_DECLARE_STD_UNARY_FUNCTION(T, lround) \
225 RVEC_DECLARE_STD_UNARY_FUNCTION(T, llround) \
226 RVEC_DECLARE_STD_UNARY_FUNCTION(T, erf) \
227 RVEC_DECLARE_STD_UNARY_FUNCTION(T, erfc) \
228 RVEC_DECLARE_STD_UNARY_FUNCTION(T, lgamma) \
229 RVEC_DECLARE_STD_UNARY_FUNCTION(T, tgamma) \
231RVEC_DECLARE_STD_FUNCTIONS(
float)
232RVEC_DECLARE_STD_FUNCTIONS(
double)
233#undef RVEC_DECLARE_STD_UNARY_FUNCTION
234#undef RVEC_DECLARE_STD_BINARY_FUNCTION
235#undef RVEC_DECLARE_STD_UNARY_FUNCTIONS
239#define RVEC_DECLARE_VDT_UNARY_FUNCTION(T, F) \
240 RVEC_DECLARE_UNARY_FUNCTION(T, F, vdt::F)
242RVEC_DECLARE_VDT_UNARY_FUNCTION(
float, fast_expf)
243RVEC_DECLARE_VDT_UNARY_FUNCTION(
float, fast_logf)
244RVEC_DECLARE_VDT_UNARY_FUNCTION(
float, fast_sinf)
245RVEC_DECLARE_VDT_UNARY_FUNCTION(
float, fast_cosf)
246RVEC_DECLARE_VDT_UNARY_FUNCTION(
float, fast_tanf)
247RVEC_DECLARE_VDT_UNARY_FUNCTION(
float, fast_asinf)
248RVEC_DECLARE_VDT_UNARY_FUNCTION(
float, fast_acosf)
249RVEC_DECLARE_VDT_UNARY_FUNCTION(
float, fast_atanf)
251RVEC_DECLARE_VDT_UNARY_FUNCTION(
double, fast_exp)
252RVEC_DECLARE_VDT_UNARY_FUNCTION(
double, fast_log)
253RVEC_DECLARE_VDT_UNARY_FUNCTION(
double, fast_sin)
254RVEC_DECLARE_VDT_UNARY_FUNCTION(
double, fast_cos)
255RVEC_DECLARE_VDT_UNARY_FUNCTION(
double, fast_tan)
256RVEC_DECLARE_VDT_UNARY_FUNCTION(
double, fast_asin)
257RVEC_DECLARE_VDT_UNARY_FUNCTION(
double, fast_acos)
258RVEC_DECLARE_VDT_UNARY_FUNCTION(
double, fast_atan)