Loading [MathJax]/jax/output/HTML-CSS/config.js
Logo ROOT   6.14/05
Reference Guide
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
RVec.cxx
Go to the documentation of this file.
1 #include "ROOT/RVec.hxx"
2 
3 #if (_VECOPS_USE_EXTERN_TEMPLATES)
4 
5 namespace ROOT {
6 namespace VecOps {
7 
8 #define TVEC_DECLARE_UNARY_OPERATOR(T, OP) \
9  template RVec<T> operator OP(const RVec<T> &);
10 
11 #define TVEC_DECLARE_BINARY_OPERATOR(T, OP) \
12  template auto operator OP(const RVec<T> &v, const T &y) -> RVec<decltype(v[0] OP y)>; \
13  template auto operator OP(const T &x, const RVec<T> &v) -> RVec<decltype(x OP v[0])>; \
14  template auto operator OP(const RVec<T> &v0, const RVec<T> &v1) -> RVec<decltype(v0[0] OP v1[0])>;
15 
16 #define TVEC_DECLARE_LOGICAL_OPERATOR(T, OP) \
17  template RVec<int> operator OP(const RVec<T> &, const T &); \
18  template RVec<int> operator OP(const T &, const RVec<T> &); \
19  template RVec<int> operator OP(const RVec<T> &, const RVec<T> &);
20 
21 #define TVEC_DECLARE_ASSIGN_OPERATOR(T, OP) \
22  template RVec<T> &operator OP(RVec<T> &, const T &); \
23  template RVec<T> &operator OP(RVec<T> &, const RVec<T> &);
24 
25 #define TVEC_DECLARE_FLOAT_TEMPLATE(T) \
26  template class RVec<T>; \
27  TVEC_DECLARE_UNARY_OPERATOR(T, +) \
28  TVEC_DECLARE_UNARY_OPERATOR(T, -) \
29  TVEC_DECLARE_UNARY_OPERATOR(T, !) \
30  TVEC_DECLARE_BINARY_OPERATOR(T, +) \
31  TVEC_DECLARE_BINARY_OPERATOR(T, -) \
32  TVEC_DECLARE_BINARY_OPERATOR(T, *) \
33  TVEC_DECLARE_BINARY_OPERATOR(T, /) \
34  TVEC_DECLARE_ASSIGN_OPERATOR(T, +=) \
35  TVEC_DECLARE_ASSIGN_OPERATOR(T, -=) \
36  TVEC_DECLARE_ASSIGN_OPERATOR(T, *=) \
37  TVEC_DECLARE_ASSIGN_OPERATOR(T, /=) \
38  TVEC_DECLARE_LOGICAL_OPERATOR(T, <) \
39  TVEC_DECLARE_LOGICAL_OPERATOR(T, >) \
40  TVEC_DECLARE_LOGICAL_OPERATOR(T, ==) \
41  TVEC_DECLARE_LOGICAL_OPERATOR(T, !=) \
42  TVEC_DECLARE_LOGICAL_OPERATOR(T, <=) \
43  TVEC_DECLARE_LOGICAL_OPERATOR(T, >=) \
44  TVEC_DECLARE_LOGICAL_OPERATOR(T, &&) \
45  TVEC_DECLARE_LOGICAL_OPERATOR(T, ||)
46 
47 #define TVEC_DECLARE_INTEGER_TEMPLATE(T) \
48  template class RVec<T>; \
49  TVEC_DECLARE_UNARY_OPERATOR(T, +) \
50  TVEC_DECLARE_UNARY_OPERATOR(T, -) \
51  TVEC_DECLARE_UNARY_OPERATOR(T, ~) \
52  TVEC_DECLARE_UNARY_OPERATOR(T, !) \
53  TVEC_DECLARE_BINARY_OPERATOR(T, +) \
54  TVEC_DECLARE_BINARY_OPERATOR(T, -) \
55  TVEC_DECLARE_BINARY_OPERATOR(T, *) \
56  TVEC_DECLARE_BINARY_OPERATOR(T, /) \
57  TVEC_DECLARE_BINARY_OPERATOR(T, %) \
58  TVEC_DECLARE_BINARY_OPERATOR(T, &) \
59  TVEC_DECLARE_BINARY_OPERATOR(T, |) \
60  TVEC_DECLARE_BINARY_OPERATOR(T, ^) \
61  TVEC_DECLARE_ASSIGN_OPERATOR(T, +=) \
62  TVEC_DECLARE_ASSIGN_OPERATOR(T, -=) \
63  TVEC_DECLARE_ASSIGN_OPERATOR(T, *=) \
64  TVEC_DECLARE_ASSIGN_OPERATOR(T, /=) \
65  TVEC_DECLARE_ASSIGN_OPERATOR(T, %=) \
66  TVEC_DECLARE_ASSIGN_OPERATOR(T, &=) \
67  TVEC_DECLARE_ASSIGN_OPERATOR(T, |=) \
68  TVEC_DECLARE_ASSIGN_OPERATOR(T, ^=) \
69  TVEC_DECLARE_ASSIGN_OPERATOR(T, >>=) \
70  TVEC_DECLARE_ASSIGN_OPERATOR(T, <<=) \
71  TVEC_DECLARE_LOGICAL_OPERATOR(T, <) \
72  TVEC_DECLARE_LOGICAL_OPERATOR(T, >) \
73  TVEC_DECLARE_LOGICAL_OPERATOR(T, ==) \
74  TVEC_DECLARE_LOGICAL_OPERATOR(T, !=) \
75  TVEC_DECLARE_LOGICAL_OPERATOR(T, <=) \
76  TVEC_DECLARE_LOGICAL_OPERATOR(T, >=) \
77  TVEC_DECLARE_LOGICAL_OPERATOR(T, &&) \
78  TVEC_DECLARE_LOGICAL_OPERATOR(T, ||)
79 
80 TVEC_DECLARE_INTEGER_TEMPLATE(char)
81 TVEC_DECLARE_INTEGER_TEMPLATE(short)
82 TVEC_DECLARE_INTEGER_TEMPLATE(int)
83 TVEC_DECLARE_INTEGER_TEMPLATE(long)
84 TVEC_DECLARE_INTEGER_TEMPLATE(long long)
85 
86 TVEC_DECLARE_INTEGER_TEMPLATE(unsigned char)
87 TVEC_DECLARE_INTEGER_TEMPLATE(unsigned short)
88 TVEC_DECLARE_INTEGER_TEMPLATE(unsigned int)
89 TVEC_DECLARE_INTEGER_TEMPLATE(unsigned long)
90 TVEC_DECLARE_INTEGER_TEMPLATE(unsigned long long)
91 
92 TVEC_DECLARE_FLOAT_TEMPLATE(float)
93 TVEC_DECLARE_FLOAT_TEMPLATE(double)
94 
95 #define TVEC_DECLARE_UNARY_FUNCTION(T, NAME, FUNC) \
96  template RVec<PromoteType<T>> NAME(const RVec<T> &);
97 
98 #define TVEC_DECLARE_STD_UNARY_FUNCTION(T, F) TVEC_DECLARE_UNARY_FUNCTION(T, F, ::std::F)
99 
100 #define TVEC_DECLARE_BINARY_FUNCTION(T0, T1, NAME, FUNC) \
101  template RVec<PromoteTypes<T0, T1>> NAME(const RVec<T0> &v, const T1 &y); \
102  template RVec<PromoteTypes<T0, T1>> NAME(const T0 &x, const RVec<T1> &v); \
103  template RVec<PromoteTypes<T0, T1>> NAME(const RVec<T0> &v0, const RVec<T1> &v1);
104 
105 #define TVEC_DECLARE_STD_BINARY_FUNCTION(T, F) TVEC_DECLARE_BINARY_FUNCTION(T, T, F, ::std::F)
106 
107 #define TVEC_DECLARE_STD_FUNCTIONS(T) \
108  TVEC_DECLARE_STD_UNARY_FUNCTION(T, abs) \
109  TVEC_DECLARE_STD_BINARY_FUNCTION(T, fdim) \
110  TVEC_DECLARE_STD_BINARY_FUNCTION(T, fmod) \
111  TVEC_DECLARE_STD_BINARY_FUNCTION(T, remainder) \
112  TVEC_DECLARE_STD_UNARY_FUNCTION(T, exp) \
113  TVEC_DECLARE_STD_UNARY_FUNCTION(T, exp2) \
114  TVEC_DECLARE_STD_UNARY_FUNCTION(T, expm1) \
115  TVEC_DECLARE_STD_UNARY_FUNCTION(T, log) \
116  TVEC_DECLARE_STD_UNARY_FUNCTION(T, log10) \
117  TVEC_DECLARE_STD_UNARY_FUNCTION(T, log2) \
118  TVEC_DECLARE_STD_UNARY_FUNCTION(T, log1p) \
119  TVEC_DECLARE_STD_BINARY_FUNCTION(T, pow) \
120  TVEC_DECLARE_STD_UNARY_FUNCTION(T, sqrt) \
121  TVEC_DECLARE_STD_UNARY_FUNCTION(T, cbrt) \
122  TVEC_DECLARE_STD_BINARY_FUNCTION(T, hypot) \
123  TVEC_DECLARE_STD_UNARY_FUNCTION(T, sin) \
124  TVEC_DECLARE_STD_UNARY_FUNCTION(T, cos) \
125  TVEC_DECLARE_STD_UNARY_FUNCTION(T, tan) \
126  TVEC_DECLARE_STD_UNARY_FUNCTION(T, asin) \
127  TVEC_DECLARE_STD_UNARY_FUNCTION(T, acos) \
128  TVEC_DECLARE_STD_UNARY_FUNCTION(T, atan) \
129  TVEC_DECLARE_STD_BINARY_FUNCTION(T, atan2) \
130  TVEC_DECLARE_STD_UNARY_FUNCTION(T, sinh) \
131  TVEC_DECLARE_STD_UNARY_FUNCTION(T, cosh) \
132  TVEC_DECLARE_STD_UNARY_FUNCTION(T, tanh) \
133  TVEC_DECLARE_STD_UNARY_FUNCTION(T, asinh) \
134  TVEC_DECLARE_STD_UNARY_FUNCTION(T, acosh) \
135  TVEC_DECLARE_STD_UNARY_FUNCTION(T, atanh) \
136  TVEC_DECLARE_STD_UNARY_FUNCTION(T, floor) \
137  TVEC_DECLARE_STD_UNARY_FUNCTION(T, ceil) \
138  TVEC_DECLARE_STD_UNARY_FUNCTION(T, trunc) \
139  TVEC_DECLARE_STD_UNARY_FUNCTION(T, round) \
140  TVEC_DECLARE_STD_UNARY_FUNCTION(T, lround) \
141  TVEC_DECLARE_STD_UNARY_FUNCTION(T, llround) \
142  TVEC_DECLARE_STD_UNARY_FUNCTION(T, erf) \
143  TVEC_DECLARE_STD_UNARY_FUNCTION(T, erfc) \
144  TVEC_DECLARE_STD_UNARY_FUNCTION(T, lgamma) \
145  TVEC_DECLARE_STD_UNARY_FUNCTION(T, tgamma) \
146 
147 TVEC_DECLARE_STD_FUNCTIONS(float)
148 TVEC_DECLARE_STD_FUNCTIONS(double)
149 #undef TVEC_DECLARE_STD_UNARY_FUNCTION
150 #undef TVEC_DECLARE_STD_BINARY_FUNCTION
151 #undef TVEC_DECLARE_STD_UNARY_FUNCTIONS
152 
153 #ifdef R__HAS_VDT
154 
155 #define TVEC_DECLARE_VDT_UNARY_FUNCTION(T, F) \
156  TVEC_DECLARE_UNARY_FUNCTION(T, F, vdt::F)
157 
158 TVEC_DECLARE_VDT_UNARY_FUNCTION(float, fast_expf)
159 TVEC_DECLARE_VDT_UNARY_FUNCTION(float, fast_logf)
160 TVEC_DECLARE_VDT_UNARY_FUNCTION(float, fast_sinf)
161 TVEC_DECLARE_VDT_UNARY_FUNCTION(float, fast_cosf)
162 TVEC_DECLARE_VDT_UNARY_FUNCTION(float, fast_tanf)
163 TVEC_DECLARE_VDT_UNARY_FUNCTION(float, fast_asinf)
164 TVEC_DECLARE_VDT_UNARY_FUNCTION(float, fast_acosf)
165 TVEC_DECLARE_VDT_UNARY_FUNCTION(float, fast_atanf)
166 
167 TVEC_DECLARE_VDT_UNARY_FUNCTION(double, fast_exp)
168 TVEC_DECLARE_VDT_UNARY_FUNCTION(double, fast_log)
169 TVEC_DECLARE_VDT_UNARY_FUNCTION(double, fast_sin)
170 TVEC_DECLARE_VDT_UNARY_FUNCTION(double, fast_cos)
171 TVEC_DECLARE_VDT_UNARY_FUNCTION(double, fast_tan)
172 TVEC_DECLARE_VDT_UNARY_FUNCTION(double, fast_asin)
173 TVEC_DECLARE_VDT_UNARY_FUNCTION(double, fast_acos)
174 TVEC_DECLARE_VDT_UNARY_FUNCTION(double, fast_atan)
175 
176 #endif // R__HAS_VDT
177 
178 } // namespace VecOps
179 } // namespace ROOT
180 
181 #endif // _VECOPS_USE_EXTERN_TEMPLATES
Namespace for new ROOT classes and functions.
Definition: StringConv.hxx:21