Eigen  5.0.1-dev+60122df6
 
Loading...
Searching...
No Matches
ArrayCwiseBinaryOps.inc
1
6template <typename OtherDerived>
7EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const EIGEN_CWISE_BINARY_RETURN_TYPE(Derived, OtherDerived, product) operator*(
8 const EIGEN_CURRENT_STORAGE_BASE_CLASS<OtherDerived> &other) const {
9 return EIGEN_CWISE_BINARY_RETURN_TYPE(Derived, OtherDerived, product)(derived(), other.derived());
10}
11
16template <typename OtherDerived>
17EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const CwiseBinaryOp<
18 internal::scalar_quotient_op<Scalar, typename OtherDerived::Scalar>, const Derived, const OtherDerived>
19operator/(const EIGEN_CURRENT_STORAGE_BASE_CLASS<OtherDerived> &other) const {
20 return CwiseBinaryOp<internal::scalar_quotient_op<Scalar, typename OtherDerived::Scalar>, const Derived,
21 const OtherDerived>(derived(), other.derived());
22}
23
31template <int NaNPropagation = PropagateFast, typename OtherDerived>
32EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const
33 CwiseBinaryOp<internal::scalar_min_op<Scalar, Scalar, NaNPropagation>, const Derived, const OtherDerived>
34#ifdef EIGEN_PARSED_BY_DOXYGEN
35 min
36#else
37 (min)
38#endif
39 (const EIGEN_CURRENT_STORAGE_BASE_CLASS<OtherDerived> &other) const {
40 return CwiseBinaryOp<internal::scalar_min_op<Scalar, Scalar, NaNPropagation>, const Derived, const OtherDerived>(
41 derived(), other.derived());
42}
43
48template <int NaNPropagation = PropagateFast>
49EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const
50 CwiseBinaryOp<internal::scalar_min_op<Scalar, Scalar, NaNPropagation>, const Derived,
51 const CwiseNullaryOp<internal::scalar_constant_op<Scalar>, PlainObject> >
52#ifdef EIGEN_PARSED_BY_DOXYGEN
53 min
54#else
55 (min)
56#endif
57 (const Scalar &other) const {
58 return (min<NaNPropagation>)(Derived::PlainObject::Constant(rows(), cols(), other));
59}
60
68template <int NaNPropagation = PropagateFast, typename OtherDerived>
69EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const
70 CwiseBinaryOp<internal::scalar_max_op<Scalar, Scalar, NaNPropagation>, const Derived, const OtherDerived>
71#ifdef EIGEN_PARSED_BY_DOXYGEN
72 max
73#else
74 (max)
75#endif
76 (const EIGEN_CURRENT_STORAGE_BASE_CLASS<OtherDerived> &other) const {
77 return CwiseBinaryOp<internal::scalar_max_op<Scalar, Scalar, NaNPropagation>, const Derived, const OtherDerived>(
78 derived(), other.derived());
79}
80
85template <int NaNPropagation = PropagateFast>
86EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const
87 CwiseBinaryOp<internal::scalar_max_op<Scalar, Scalar, NaNPropagation>, const Derived,
88 const CwiseNullaryOp<internal::scalar_constant_op<Scalar>, PlainObject> >
89#ifdef EIGEN_PARSED_BY_DOXYGEN
90 max
91#else
92 (max)
93#endif
94 (const Scalar &other) const {
95 return (max<NaNPropagation>)(Derived::PlainObject::Constant(rows(), cols(), other));
96}
97
102EIGEN_MAKE_CWISE_BINARY_OP(absolute_difference, absolute_difference)
103
104
108EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const
109 CwiseBinaryOp<internal::scalar_absolute_difference_op<Scalar, Scalar>, const Derived,
110 const CwiseNullaryOp<internal::scalar_constant_op<Scalar>, PlainObject> >
111#ifdef EIGEN_PARSED_BY_DOXYGEN
112 absolute_difference
113#else
114 (absolute_difference)
115#endif
116 (const Scalar &other) const {
117 return (absolute_difference)(Derived::PlainObject::Constant(rows(), cols(), other));
118}
119
127EIGEN_MAKE_CWISE_BINARY_OP(pow, pow)
128
129
134EIGEN_MAKE_CWISE_BINARY_OP(atan2, atan2)
135
136// TODO code generating macros could be moved to Macros.h and could include generation of documentation
137#define EIGEN_MAKE_CWISE_COMP_OP(OP, COMPARATOR) \
138 template <typename OtherDerived> \
139 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const \
140 CwiseBinaryOp<internal::scalar_cmp_op<Scalar, typename OtherDerived::Scalar, internal::cmp_##COMPARATOR>, \
141 const Derived, const OtherDerived> \
142 OP(const EIGEN_CURRENT_STORAGE_BASE_CLASS<OtherDerived> &other) const { \
143 return CwiseBinaryOp<internal::scalar_cmp_op<Scalar, typename OtherDerived::Scalar, internal::cmp_##COMPARATOR>, \
144 const Derived, const OtherDerived>(derived(), other.derived()); \
145 } \
146 typedef CwiseBinaryOp<internal::scalar_cmp_op<Scalar, Scalar, internal::cmp_##COMPARATOR>, const Derived, \
147 const CwiseNullaryOp<internal::scalar_constant_op<Scalar>, PlainObject> > \
148 Cmp##COMPARATOR##ReturnType; \
149 typedef CwiseBinaryOp<internal::scalar_cmp_op<Scalar, Scalar, internal::cmp_##COMPARATOR>, \
150 const CwiseNullaryOp<internal::scalar_constant_op<Scalar>, PlainObject>, const Derived> \
151 RCmp##COMPARATOR##ReturnType; \
152 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const Cmp##COMPARATOR##ReturnType OP(const Scalar &s) const { \
153 return this->OP(Derived::PlainObject::Constant(rows(), cols(), s)); \
154 } \
155 EIGEN_DEVICE_FUNC friend EIGEN_STRONG_INLINE const RCmp##COMPARATOR##ReturnType OP( \
156 const Scalar &s, const EIGEN_CURRENT_STORAGE_BASE_CLASS<Derived> &d) { \
157 return Derived::PlainObject::Constant(d.rows(), d.cols(), s).OP(d); \
158 }
159
160#define EIGEN_MAKE_CWISE_COMP_R_OP(OP, R_OP, RCOMPARATOR) \
161 template <typename OtherDerived> \
162 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const \
163 CwiseBinaryOp<internal::scalar_cmp_op<typename OtherDerived::Scalar, Scalar, internal::cmp_##RCOMPARATOR>, \
164 const OtherDerived, const Derived> \
165 OP(const EIGEN_CURRENT_STORAGE_BASE_CLASS<OtherDerived> &other) const { \
166 return CwiseBinaryOp<internal::scalar_cmp_op<typename OtherDerived::Scalar, Scalar, internal::cmp_##RCOMPARATOR>, \
167 const OtherDerived, const Derived>(other.derived(), derived()); \
168 } \
169 EIGEN_DEVICE_FUNC inline const RCmp##RCOMPARATOR##ReturnType OP(const Scalar &s) const { \
170 return Derived::PlainObject::Constant(rows(), cols(), s).R_OP(*this); \
171 } \
172 friend inline const Cmp##RCOMPARATOR##ReturnType OP(const Scalar &s, const Derived &d) { \
173 return d.R_OP(Derived::PlainObject::Constant(d.rows(), d.cols(), s)); \
174 }
175
183EIGEN_MAKE_CWISE_COMP_OP(operator<, LT)
184
185
192EIGEN_MAKE_CWISE_COMP_OP(operator<=, LE)
193
194
201EIGEN_MAKE_CWISE_COMP_R_OP(operator>, operator<, LT)
202
203
210EIGEN_MAKE_CWISE_COMP_R_OP(operator>=, operator<=, LE)
211
212
224EIGEN_MAKE_CWISE_COMP_OP(operator==, EQ)
225
226
238EIGEN_MAKE_CWISE_COMP_OP(operator!=, NEQ)
239
240#undef EIGEN_MAKE_CWISE_COMP_OP
241#undef EIGEN_MAKE_CWISE_COMP_R_OP
242
243// scalar addition
244#ifndef EIGEN_PARSED_BY_DOXYGEN
245EIGEN_MAKE_SCALAR_BINARY_OP(operator+, sum)
246#else
256template <typename T>
257const CwiseBinaryOp<internal::scalar_sum_op<Scalar, T>, Derived, Constant<T> > operator+(const T &scalar) const;
262template <typename T>
263friend const CwiseBinaryOp<internal::scalar_sum_op<T, Scalar>, Constant<T>, Derived> operator+(
264 const T &scalar, const StorageBaseType &expr);
265#endif
266
267#ifndef EIGEN_PARSED_BY_DOXYGEN
268EIGEN_MAKE_SCALAR_BINARY_OP(operator-, difference)
269#else
279template <typename T>
280const CwiseBinaryOp<internal::scalar_difference_op<Scalar, T>, Derived, Constant<T> > operator-(const T &scalar) const;
285template <typename T>
286friend const CwiseBinaryOp<internal::scalar_difference_op<T, Scalar>, Constant<T>, Derived> operator-(
287 const T &scalar, const StorageBaseType &expr);
288#endif
289
290#ifndef EIGEN_PARSED_BY_DOXYGEN
291EIGEN_MAKE_SCALAR_BINARY_OP_ONTHELEFT(operator/, quotient)
292#else
299template <typename T>
300friend inline const CwiseBinaryOp<internal::scalar_quotient_op<T, Scalar>, Constant<T>, Derived> operator/(
301 const T &s, const StorageBaseType &a);
302#endif
303
304// NOTE disabled until we agree on argument order
305#if 0
316template<typename DerivedN>
317inline const CwiseBinaryOp<internal::scalar_polygamma_op<Scalar>, const DerivedN, const Derived>
318polygamma(const EIGEN_CURRENT_STORAGE_BASE_CLASS<DerivedN> &n) const
319{
320 return CwiseBinaryOp<internal::scalar_polygamma_op<Scalar>, const DerivedN, const Derived>(n.derived(), this->derived());
321}
322#endif
323
340template <typename DerivedQ>
341inline const CwiseBinaryOp<internal::scalar_zeta_op<Scalar>, const Derived, const DerivedQ> zeta(
342 const EIGEN_CURRENT_STORAGE_BASE_CLASS<DerivedQ> &q) const {
343 return CwiseBinaryOp<internal::scalar_zeta_op<Scalar>, const Derived, const DerivedQ>(this->derived(), q.derived());
344}