Medial Code Documentation
Loading...
Searching...
No Matches
ArrayCwiseBinaryOps.h
1
6template<typename OtherDerived>
7EIGEN_DEVICE_FUNC
8EIGEN_STRONG_INLINE const EIGEN_CWISE_BINARY_RETURN_TYPE(Derived,OtherDerived,product)
9operator*(const EIGEN_CURRENT_STORAGE_BASE_CLASS<OtherDerived> &other) const
10{
11 return EIGEN_CWISE_BINARY_RETURN_TYPE(Derived,OtherDerived,product)(derived(), other.derived());
12}
13
18template<typename OtherDerived>
19EIGEN_DEVICE_FUNC
20EIGEN_STRONG_INLINE const CwiseBinaryOp<internal::scalar_quotient_op<Scalar,typename OtherDerived::Scalar>, const Derived, const OtherDerived>
21operator/(const EIGEN_CURRENT_STORAGE_BASE_CLASS<OtherDerived> &other) const
22{
23 return CwiseBinaryOp<internal::scalar_quotient_op<Scalar,typename OtherDerived::Scalar>, const Derived, const OtherDerived>(derived(), other.derived());
24}
25
33template <int NaNPropagation, typename OtherDerived>
34EIGEN_DEVICE_FUNC
35EIGEN_STRONG_INLINE const CwiseBinaryOp<internal::scalar_min_op<Scalar,Scalar,NaNPropagation>, const Derived, const OtherDerived>
36#ifdef EIGEN_PARSED_BY_DOXYGEN
37min
38#else
39(min)
40#endif
41(const EIGEN_CURRENT_STORAGE_BASE_CLASS<OtherDerived> &other) const
42{
43 return CwiseBinaryOp<internal::scalar_min_op<Scalar,Scalar,NaNPropagation>, const Derived, const OtherDerived>(derived(), other.derived());
44}
45
46template <typename OtherDerived>
47EIGEN_DEVICE_FUNC
48EIGEN_STRONG_INLINE const CwiseBinaryOp<internal::scalar_min_op<Scalar,Scalar,PropagateFast>, const Derived, const OtherDerived>
49#ifdef EIGEN_PARSED_BY_DOXYGEN
50min
51#else
52(min)
53#endif
54(const OtherDerived &other) const
55{
56 return (min<PropagateFast>)(other);
57}
58
63template <int NaNPropagation>
64EIGEN_DEVICE_FUNC
65EIGEN_STRONG_INLINE const CwiseBinaryOp<internal::scalar_min_op<Scalar,Scalar,NaNPropagation>, const Derived,
66 const CwiseNullaryOp<internal::scalar_constant_op<Scalar>, PlainObject> >
67#ifdef EIGEN_PARSED_BY_DOXYGEN
68min
69#else
70(min)
71#endif
72(const Scalar &other) const
73{
74 return (min<NaNPropagation>)(Derived::PlainObject::Constant(rows(), cols(), other));
75}
76
77EIGEN_DEVICE_FUNC
78 EIGEN_STRONG_INLINE const CwiseBinaryOp<internal::scalar_min_op<Scalar,Scalar,PropagateFast>, const Derived,
79 const CwiseNullaryOp<internal::scalar_constant_op<Scalar>, PlainObject> >
80#ifdef EIGEN_PARSED_BY_DOXYGEN
81min
82#else
83(min)
84#endif
85(const Scalar &other) const
86{
87 return (min<PropagateFast>)(Derived::PlainObject::Constant(rows(), cols(), other));
88}
89
97template <int NaNPropagation, typename OtherDerived>
98EIGEN_DEVICE_FUNC
99EIGEN_STRONG_INLINE const CwiseBinaryOp<internal::scalar_max_op<Scalar,Scalar,NaNPropagation>, const Derived, const OtherDerived>
100#ifdef EIGEN_PARSED_BY_DOXYGEN
101max
102#else
103(max)
104#endif
105(const EIGEN_CURRENT_STORAGE_BASE_CLASS<OtherDerived> &other) const
106{
107 return CwiseBinaryOp<internal::scalar_max_op<Scalar,Scalar,NaNPropagation>, const Derived, const OtherDerived>(derived(), other.derived());
108}
109
110template <typename OtherDerived>
111EIGEN_DEVICE_FUNC
112EIGEN_STRONG_INLINE const CwiseBinaryOp<internal::scalar_max_op<Scalar,Scalar,PropagateFast>, const Derived, const OtherDerived>
113#ifdef EIGEN_PARSED_BY_DOXYGEN
114max
115#else
116(max)
117#endif
118(const OtherDerived &other) const
119{
120 return (max<PropagateFast>)(other);
121}
122
127template <int NaNPropagation>
128EIGEN_DEVICE_FUNC
129EIGEN_STRONG_INLINE const CwiseBinaryOp<internal::scalar_max_op<Scalar,Scalar,NaNPropagation>, const Derived,
130 const CwiseNullaryOp<internal::scalar_constant_op<Scalar>, PlainObject> >
131#ifdef EIGEN_PARSED_BY_DOXYGEN
132max
133#else
134(max)
135#endif
136(const Scalar &other) const
137{
138 return (max<NaNPropagation>)(Derived::PlainObject::Constant(rows(), cols(), other));
139}
140
141EIGEN_DEVICE_FUNC
142EIGEN_STRONG_INLINE const CwiseBinaryOp<internal::scalar_max_op<Scalar,Scalar,PropagateFast>, const Derived,
143 const CwiseNullaryOp<internal::scalar_constant_op<Scalar>, PlainObject> >
144#ifdef EIGEN_PARSED_BY_DOXYGEN
145max
146#else
147(max)
148#endif
149(const Scalar &other) const
150{
151 return (max<PropagateFast>)(Derived::PlainObject::Constant(rows(), cols(), other));
152}
153
158EIGEN_MAKE_CWISE_BINARY_OP(absolute_difference,absolute_difference)
159
160
164EIGEN_DEVICE_FUNC
165EIGEN_STRONG_INLINE const CwiseBinaryOp<internal::scalar_absolute_difference_op<Scalar,Scalar>, const Derived,
166 const CwiseNullaryOp<internal::scalar_constant_op<Scalar>, PlainObject> >
167#ifdef EIGEN_PARSED_BY_DOXYGEN
168absolute_difference
169#else
170(absolute_difference)
171#endif
172(const Scalar &other) const
173{
174 return (absolute_difference)(Derived::PlainObject::Constant(rows(), cols(), other));
175}
176
184EIGEN_MAKE_CWISE_BINARY_OP(pow,pow)
185
186#ifndef EIGEN_PARSED_BY_DOXYGEN
187EIGEN_MAKE_SCALAR_BINARY_OP_ONTHERIGHT(pow,pow)
188#else
201template<typename T>
202const CwiseBinaryOp<internal::scalar_pow_op<Scalar,T>,Derived,Constant<T> > pow(const T& exponent) const;
203#endif
204
205
206// TODO code generating macros could be moved to Macros.h and could include generation of documentation
207#define EIGEN_MAKE_CWISE_COMP_OP(OP, COMPARATOR) \
208template<typename OtherDerived> \
209EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const CwiseBinaryOp<internal::scalar_cmp_op<Scalar, typename OtherDerived::Scalar, internal::cmp_ ## COMPARATOR>, const Derived, const OtherDerived> \
210OP(const EIGEN_CURRENT_STORAGE_BASE_CLASS<OtherDerived> &other) const \
211{ \
212 return CwiseBinaryOp<internal::scalar_cmp_op<Scalar, typename OtherDerived::Scalar, internal::cmp_ ## COMPARATOR>, const Derived, const OtherDerived>(derived(), other.derived()); \
213}\
214typedef CwiseBinaryOp<internal::scalar_cmp_op<Scalar,Scalar, internal::cmp_ ## COMPARATOR>, const Derived, const CwiseNullaryOp<internal::scalar_constant_op<Scalar>, PlainObject> > Cmp ## COMPARATOR ## ReturnType; \
215typedef CwiseBinaryOp<internal::scalar_cmp_op<Scalar,Scalar, internal::cmp_ ## COMPARATOR>, const CwiseNullaryOp<internal::scalar_constant_op<Scalar>, PlainObject>, const Derived > RCmp ## COMPARATOR ## ReturnType; \
216EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const Cmp ## COMPARATOR ## ReturnType \
217OP(const Scalar& s) const { \
218 return this->OP(Derived::PlainObject::Constant(rows(), cols(), s)); \
219} \
220EIGEN_DEVICE_FUNC friend EIGEN_STRONG_INLINE const RCmp ## COMPARATOR ## ReturnType \
221OP(const Scalar& s, const EIGEN_CURRENT_STORAGE_BASE_CLASS<Derived>& d) { \
222 return Derived::PlainObject::Constant(d.rows(), d.cols(), s).OP(d); \
223}
224
225#define EIGEN_MAKE_CWISE_COMP_R_OP(OP, R_OP, RCOMPARATOR) \
226template<typename OtherDerived> \
227EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const CwiseBinaryOp<internal::scalar_cmp_op<typename OtherDerived::Scalar, Scalar, internal::cmp_##RCOMPARATOR>, const OtherDerived, const Derived> \
228OP(const EIGEN_CURRENT_STORAGE_BASE_CLASS<OtherDerived> &other) const \
229{ \
230 return CwiseBinaryOp<internal::scalar_cmp_op<typename OtherDerived::Scalar, Scalar, internal::cmp_##RCOMPARATOR>, const OtherDerived, const Derived>(other.derived(), derived()); \
231} \
232EIGEN_DEVICE_FUNC \
233inline const RCmp ## RCOMPARATOR ## ReturnType \
234OP(const Scalar& s) const { \
235 return Derived::PlainObject::Constant(rows(), cols(), s).R_OP(*this); \
236} \
237friend inline const Cmp ## RCOMPARATOR ## ReturnType \
238OP(const Scalar& s, const Derived& d) { \
239 return d.R_OP(Derived::PlainObject::Constant(d.rows(), d.cols(), s)); \
240}
241
242
243
251EIGEN_MAKE_CWISE_COMP_OP(operator<, LT)
252
253
260EIGEN_MAKE_CWISE_COMP_OP(operator<=, LE)
261
262
269EIGEN_MAKE_CWISE_COMP_R_OP(operator>, operator<, LT)
270
271
278EIGEN_MAKE_CWISE_COMP_R_OP(operator>=, operator<=, LE)
279
280
292EIGEN_MAKE_CWISE_COMP_OP(operator==, EQ)
293
294
306EIGEN_MAKE_CWISE_COMP_OP(operator!=, NEQ)
307
308
309#undef EIGEN_MAKE_CWISE_COMP_OP
310#undef EIGEN_MAKE_CWISE_COMP_R_OP
311
312// scalar addition
313#ifndef EIGEN_PARSED_BY_DOXYGEN
314EIGEN_MAKE_SCALAR_BINARY_OP(operator+,sum)
315#else
325template<typename T>
326const CwiseBinaryOp<internal::scalar_sum_op<Scalar,T>,Derived,Constant<T> > operator+(const T& scalar) const;
331template<typename T> friend
332const CwiseBinaryOp<internal::scalar_sum_op<T,Scalar>,Constant<T>,Derived> operator+(const T& scalar, const StorageBaseType& expr);
333#endif
334
335#ifndef EIGEN_PARSED_BY_DOXYGEN
336EIGEN_MAKE_SCALAR_BINARY_OP(operator-,difference)
337#else
347template<typename T>
348const CwiseBinaryOp<internal::scalar_difference_op<Scalar,T>,Derived,Constant<T> > operator-(const T& scalar) const;
353template<typename T> friend
354const CwiseBinaryOp<internal::scalar_difference_op<T,Scalar>,Constant<T>,Derived> operator-(const T& scalar, const StorageBaseType& expr);
355#endif
356
357
358#ifndef EIGEN_PARSED_BY_DOXYGEN
359 EIGEN_MAKE_SCALAR_BINARY_OP_ONTHELEFT(operator/,quotient)
360#else
366 template<typename T> friend
367 inline const CwiseBinaryOp<internal::scalar_quotient_op<T,Scalar>,Constant<T>,Derived>
368 operator/(const T& s,const StorageBaseType& a);
369#endif
370
380template<typename OtherDerived>
381EIGEN_DEVICE_FUNC
382inline const CwiseBinaryOp<internal::scalar_boolean_xor_op, const Derived, const OtherDerived>
383operator^(const EIGEN_CURRENT_STORAGE_BASE_CLASS<OtherDerived> &other) const
384{
385 EIGEN_STATIC_ASSERT((internal::is_same<bool,Scalar>::value && internal::is_same<bool,typename OtherDerived::Scalar>::value),
386 THIS_METHOD_IS_ONLY_FOR_EXPRESSIONS_OF_BOOL);
387 return CwiseBinaryOp<internal::scalar_boolean_xor_op, const Derived, const OtherDerived>(derived(),other.derived());
388}
389
390// NOTE disabled until we agree on argument order
391#if 0
402template<typename DerivedN>
403inline const CwiseBinaryOp<internal::scalar_polygamma_op<Scalar>, const DerivedN, const Derived>
404polygamma(const EIGEN_CURRENT_STORAGE_BASE_CLASS<DerivedN> &n) const
405{
406 return CwiseBinaryOp<internal::scalar_polygamma_op<Scalar>, const DerivedN, const Derived>(n.derived(), this->derived());
407}
408#endif
409
426template<typename DerivedQ>
427inline const CwiseBinaryOp<internal::scalar_zeta_op<Scalar>, const Derived, const DerivedQ>
428zeta(const EIGEN_CURRENT_STORAGE_BASE_CLASS<DerivedQ> &q) const
429{
430 return CwiseBinaryOp<internal::scalar_zeta_op<Scalar>, const Derived, const DerivedQ>(this->derived(), q.derived());
431}