File indexing completed on 2025-04-19 09:06:36
0001
0002
0003
0004
0005
0006 template<typename OtherDerived>
0007 EIGEN_DEVICE_FUNC
0008 EIGEN_STRONG_INLINE const EIGEN_CWISE_BINARY_RETURN_TYPE(Derived,OtherDerived,product)
0009 operator*(const EIGEN_CURRENT_STORAGE_BASE_CLASS<OtherDerived> &other) const
0010 {
0011 return EIGEN_CWISE_BINARY_RETURN_TYPE(Derived,OtherDerived,product)(derived(), other.derived());
0012 }
0013
0014
0015
0016
0017
0018 template<typename OtherDerived>
0019 EIGEN_DEVICE_FUNC
0020 EIGEN_STRONG_INLINE const CwiseBinaryOp<internal::scalar_quotient_op<Scalar,typename OtherDerived::Scalar>, const Derived, const OtherDerived>
0021 operator/(const EIGEN_CURRENT_STORAGE_BASE_CLASS<OtherDerived> &other) const
0022 {
0023 return CwiseBinaryOp<internal::scalar_quotient_op<Scalar,typename OtherDerived::Scalar>, const Derived, const OtherDerived>(derived(), other.derived());
0024 }
0025
0026
0027
0028
0029
0030
0031
0032
0033 EIGEN_MAKE_CWISE_BINARY_OP(min,min)
0034
0035
0036
0037
0038
0039 EIGEN_DEVICE_FUNC
0040 EIGEN_STRONG_INLINE const CwiseBinaryOp<internal::scalar_min_op<Scalar,Scalar>, const Derived,
0041 const CwiseNullaryOp<internal::scalar_constant_op<Scalar>, PlainObject> >
0042 #ifdef EIGEN_PARSED_BY_DOXYGEN
0043 min
0044 #else
0045 (min)
0046 #endif
0047 (const Scalar &other) const
0048 {
0049 return (min)(Derived::PlainObject::Constant(rows(), cols(), other));
0050 }
0051
0052
0053
0054
0055
0056
0057
0058
0059 EIGEN_MAKE_CWISE_BINARY_OP(max,max)
0060
0061
0062
0063
0064
0065 EIGEN_DEVICE_FUNC
0066 EIGEN_STRONG_INLINE const CwiseBinaryOp<internal::scalar_max_op<Scalar,Scalar>, const Derived,
0067 const CwiseNullaryOp<internal::scalar_constant_op<Scalar>, PlainObject> >
0068 #ifdef EIGEN_PARSED_BY_DOXYGEN
0069 max
0070 #else
0071 (max)
0072 #endif
0073 (const Scalar &other) const
0074 {
0075 return (max)(Derived::PlainObject::Constant(rows(), cols(), other));
0076 }
0077
0078
0079
0080
0081
0082
0083
0084
0085 EIGEN_MAKE_CWISE_BINARY_OP(absolute_difference,absolute_difference)
0086
0087
0088
0089
0090
0091 EIGEN_DEVICE_FUNC
0092 EIGEN_STRONG_INLINE const CwiseBinaryOp<internal::scalar_absolute_difference_op<Scalar,Scalar>, const Derived,
0093 const CwiseNullaryOp<internal::scalar_constant_op<Scalar>, PlainObject> >
0094 #ifdef EIGEN_PARSED_BY_DOXYGEN
0095 absolute_difference
0096 #else
0097 (absolute_difference)
0098 #endif
0099 (const Scalar &other) const
0100 {
0101 return (absolute_difference)(Derived::PlainObject::Constant(rows(), cols(), other));
0102 }
0103
0104
0105
0106
0107
0108
0109
0110
0111 EIGEN_MAKE_CWISE_BINARY_OP(pow,pow)
0112
0113 #ifndef EIGEN_PARSED_BY_DOXYGEN
0114 EIGEN_MAKE_SCALAR_BINARY_OP_ONTHERIGHT(pow,pow)
0115 #else
0116
0117
0118
0119
0120
0121
0122
0123
0124
0125
0126
0127
0128 template<typename T>
0129 const CwiseBinaryOp<internal::scalar_pow_op<Scalar,T>,Derived,Constant<T> > pow(const T& exponent) const;
0130 #endif
0131
0132
0133
0134 #define EIGEN_MAKE_CWISE_COMP_OP(OP, COMPARATOR) \
0135 template<typename OtherDerived> \
0136 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const CwiseBinaryOp<internal::scalar_cmp_op<Scalar, typename OtherDerived::Scalar, internal::cmp_ ## COMPARATOR>, const Derived, const OtherDerived> \
0137 OP(const EIGEN_CURRENT_STORAGE_BASE_CLASS<OtherDerived> &other) const \
0138 { \
0139 return CwiseBinaryOp<internal::scalar_cmp_op<Scalar, typename OtherDerived::Scalar, internal::cmp_ ## COMPARATOR>, const Derived, const OtherDerived>(derived(), other.derived()); \
0140 }\
0141 typedef CwiseBinaryOp<internal::scalar_cmp_op<Scalar,Scalar, internal::cmp_ ## COMPARATOR>, const Derived, const CwiseNullaryOp<internal::scalar_constant_op<Scalar>, PlainObject> > Cmp ## COMPARATOR ## ReturnType; \
0142 typedef CwiseBinaryOp<internal::scalar_cmp_op<Scalar,Scalar, internal::cmp_ ## COMPARATOR>, const CwiseNullaryOp<internal::scalar_constant_op<Scalar>, PlainObject>, const Derived > RCmp ## COMPARATOR ## ReturnType; \
0143 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const Cmp ## COMPARATOR ## ReturnType \
0144 OP(const Scalar& s) const { \
0145 return this->OP(Derived::PlainObject::Constant(rows(), cols(), s)); \
0146 } \
0147 EIGEN_DEVICE_FUNC friend EIGEN_STRONG_INLINE const RCmp ## COMPARATOR ## ReturnType \
0148 OP(const Scalar& s, const EIGEN_CURRENT_STORAGE_BASE_CLASS<Derived>& d) { \
0149 return Derived::PlainObject::Constant(d.rows(), d.cols(), s).OP(d); \
0150 }
0151
0152 #define EIGEN_MAKE_CWISE_COMP_R_OP(OP, R_OP, RCOMPARATOR) \
0153 template<typename OtherDerived> \
0154 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const CwiseBinaryOp<internal::scalar_cmp_op<typename OtherDerived::Scalar, Scalar, internal::cmp_##RCOMPARATOR>, const OtherDerived, const Derived> \
0155 OP(const EIGEN_CURRENT_STORAGE_BASE_CLASS<OtherDerived> &other) const \
0156 { \
0157 return CwiseBinaryOp<internal::scalar_cmp_op<typename OtherDerived::Scalar, Scalar, internal::cmp_##RCOMPARATOR>, const OtherDerived, const Derived>(other.derived(), derived()); \
0158 } \
0159 EIGEN_DEVICE_FUNC \
0160 inline const RCmp ## RCOMPARATOR ## ReturnType \
0161 OP(const Scalar& s) const { \
0162 return Derived::PlainObject::Constant(rows(), cols(), s).R_OP(*this); \
0163 } \
0164 friend inline const Cmp ## RCOMPARATOR ## ReturnType \
0165 OP(const Scalar& s, const Derived& d) { \
0166 return d.R_OP(Derived::PlainObject::Constant(d.rows(), d.cols(), s)); \
0167 }
0168
0169
0170
0171
0172
0173
0174
0175
0176
0177
0178 EIGEN_MAKE_CWISE_COMP_OP(operator<, LT)
0179
0180
0181
0182
0183
0184
0185
0186
0187 EIGEN_MAKE_CWISE_COMP_OP(operator<=, LE)
0188
0189
0190
0191
0192
0193
0194
0195
0196 EIGEN_MAKE_CWISE_COMP_R_OP(operator>, operator<, LT)
0197
0198
0199
0200
0201
0202
0203
0204
0205 EIGEN_MAKE_CWISE_COMP_R_OP(operator>=, operator<=, LE)
0206
0207
0208
0209
0210
0211
0212
0213
0214
0215
0216
0217
0218
0219 EIGEN_MAKE_CWISE_COMP_OP(operator==, EQ)
0220
0221
0222
0223
0224
0225
0226
0227
0228
0229
0230
0231
0232
0233 EIGEN_MAKE_CWISE_COMP_OP(operator!=, NEQ)
0234
0235
0236 #undef EIGEN_MAKE_CWISE_COMP_OP
0237 #undef EIGEN_MAKE_CWISE_COMP_R_OP
0238
0239
0240 #ifndef EIGEN_PARSED_BY_DOXYGEN
0241 EIGEN_MAKE_SCALAR_BINARY_OP(operator+,sum)
0242 #else
0243
0244
0245
0246
0247
0248
0249
0250
0251
0252 template<typename T>
0253 const CwiseBinaryOp<internal::scalar_sum_op<Scalar,T>,Derived,Constant<T> > operator+(const T& scalar) const;
0254
0255
0256
0257
0258 template<typename T> friend
0259 const CwiseBinaryOp<internal::scalar_sum_op<T,Scalar>,Constant<T>,Derived> operator+(const T& scalar, const StorageBaseType& expr);
0260 #endif
0261
0262 #ifndef EIGEN_PARSED_BY_DOXYGEN
0263 EIGEN_MAKE_SCALAR_BINARY_OP(operator-,difference)
0264 #else
0265
0266
0267
0268
0269
0270
0271
0272
0273
0274 template<typename T>
0275 const CwiseBinaryOp<internal::scalar_difference_op<Scalar,T>,Derived,Constant<T> > operator-(const T& scalar) const;
0276
0277
0278
0279
0280 template<typename T> friend
0281 const CwiseBinaryOp<internal::scalar_difference_op<T,Scalar>,Constant<T>,Derived> operator-(const T& scalar, const StorageBaseType& expr);
0282 #endif
0283
0284
0285 #ifndef EIGEN_PARSED_BY_DOXYGEN
0286 EIGEN_MAKE_SCALAR_BINARY_OP_ONTHELEFT(operator/,quotient)
0287 #else
0288
0289
0290
0291
0292
0293 template<typename T> friend
0294 inline const CwiseBinaryOp<internal::scalar_quotient_op<T,Scalar>,Constant<T>,Derived>
0295 operator/(const T& s,const StorageBaseType& a);
0296 #endif
0297
0298
0299
0300
0301
0302
0303
0304
0305
0306
0307 template<typename OtherDerived>
0308 EIGEN_DEVICE_FUNC
0309 inline const CwiseBinaryOp<internal::scalar_boolean_xor_op, const Derived, const OtherDerived>
0310 operator^(const EIGEN_CURRENT_STORAGE_BASE_CLASS<OtherDerived> &other) const
0311 {
0312 EIGEN_STATIC_ASSERT((internal::is_same<bool,Scalar>::value && internal::is_same<bool,typename OtherDerived::Scalar>::value),
0313 THIS_METHOD_IS_ONLY_FOR_EXPRESSIONS_OF_BOOL);
0314 return CwiseBinaryOp<internal::scalar_boolean_xor_op, const Derived, const OtherDerived>(derived(),other.derived());
0315 }
0316
0317
0318 #if 0
0319
0320
0321
0322
0323
0324
0325
0326
0327
0328
0329 template<typename DerivedN>
0330 inline const CwiseBinaryOp<internal::scalar_polygamma_op<Scalar>, const DerivedN, const Derived>
0331 polygamma(const EIGEN_CURRENT_STORAGE_BASE_CLASS<DerivedN> &n) const
0332 {
0333 return CwiseBinaryOp<internal::scalar_polygamma_op<Scalar>, const DerivedN, const Derived>(n.derived(), this->derived());
0334 }
0335 #endif
0336
0337
0338
0339
0340
0341
0342
0343
0344
0345
0346
0347
0348
0349
0350
0351
0352
0353 template<typename DerivedQ>
0354 inline const CwiseBinaryOp<internal::scalar_zeta_op<Scalar>, const Derived, const DerivedQ>
0355 zeta(const EIGEN_CURRENT_STORAGE_BASE_CLASS<DerivedQ> &q) const
0356 {
0357 return CwiseBinaryOp<internal::scalar_zeta_op<Scalar>, const Derived, const DerivedQ>(this->derived(), q.derived());
0358 }