![]() |
Eigen
3.3.3
|
00001 00006 template<typename OtherDerived> 00007 EIGEN_DEVICE_FUNC 00008 EIGEN_STRONG_INLINE const EIGEN_CWISE_BINARY_RETURN_TYPE(Derived,OtherDerived,product) 00009 operator*(const EIGEN_CURRENT_STORAGE_BASE_CLASS<OtherDerived> &other) const 00010 { 00011 return EIGEN_CWISE_BINARY_RETURN_TYPE(Derived,OtherDerived,product)(derived(), other.derived()); 00012 } 00013 00018 template<typename OtherDerived> 00019 EIGEN_DEVICE_FUNC 00020 EIGEN_STRONG_INLINE const CwiseBinaryOp<internal::scalar_quotient_op<Scalar,typename OtherDerived::Scalar>, const Derived, const OtherDerived> 00021 operator/(const EIGEN_CURRENT_STORAGE_BASE_CLASS<OtherDerived> &other) const 00022 { 00023 return CwiseBinaryOp<internal::scalar_quotient_op<Scalar,typename OtherDerived::Scalar>, const Derived, const OtherDerived>(derived(), other.derived()); 00024 } 00025 00033 EIGEN_MAKE_CWISE_BINARY_OP(min,min) 00034 00035 00039 EIGEN_DEVICE_FUNC 00040 EIGEN_STRONG_INLINE const CwiseBinaryOp<internal::scalar_min_op<Scalar,Scalar>, const Derived, 00041 const CwiseNullaryOp<internal::scalar_constant_op<Scalar>, PlainObject> > 00042 #ifdef EIGEN_PARSED_BY_DOXYGEN 00043 min 00044 #else 00045 (min) 00046 #endif 00047 (const Scalar &other) const 00048 { 00049 return (min)(Derived::PlainObject::Constant(rows(), cols(), other)); 00050 } 00051 00059 EIGEN_MAKE_CWISE_BINARY_OP(max,max) 00060 00061 00065 EIGEN_DEVICE_FUNC 00066 EIGEN_STRONG_INLINE const CwiseBinaryOp<internal::scalar_max_op<Scalar,Scalar>, const Derived, 00067 const CwiseNullaryOp<internal::scalar_constant_op<Scalar>, PlainObject> > 00068 #ifdef EIGEN_PARSED_BY_DOXYGEN 00069 max 00070 #else 00071 (max) 00072 #endif 00073 (const Scalar &other) const 00074 { 00075 return (max)(Derived::PlainObject::Constant(rows(), cols(), other)); 00076 } 00077 00085 EIGEN_MAKE_CWISE_BINARY_OP(pow,pow) 00086 00087 #ifndef EIGEN_PARSED_BY_DOXYGEN 00088 EIGEN_MAKE_SCALAR_BINARY_OP_ONTHERIGHT(pow,pow) 00089 #else 00090 00102 template<typename T> 00103 const CwiseBinaryOp<internal::scalar_pow_op<Scalar,T>,Derived,Constant<T> > pow(const T& exponent) const; 00104 #endif 00105 00106 00107 // TODO code generating macros could be moved to Macros.h and could include generation of documentation 00108 #define EIGEN_MAKE_CWISE_COMP_OP(OP, COMPARATOR) \ 00109 template<typename OtherDerived> \ 00110 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const CwiseBinaryOp<internal::scalar_cmp_op<Scalar, typename OtherDerived::Scalar, internal::cmp_ ## COMPARATOR>, const Derived, const OtherDerived> \ 00111 OP(const EIGEN_CURRENT_STORAGE_BASE_CLASS<OtherDerived> &other) const \ 00112 { \ 00113 return CwiseBinaryOp<internal::scalar_cmp_op<Scalar, typename OtherDerived::Scalar, internal::cmp_ ## COMPARATOR>, const Derived, const OtherDerived>(derived(), other.derived()); \ 00114 }\ 00115 typedef CwiseBinaryOp<internal::scalar_cmp_op<Scalar,Scalar, internal::cmp_ ## COMPARATOR>, const Derived, const CwiseNullaryOp<internal::scalar_constant_op<Scalar>, PlainObject> > Cmp ## COMPARATOR ## ReturnType; \ 00116 typedef CwiseBinaryOp<internal::scalar_cmp_op<Scalar,Scalar, internal::cmp_ ## COMPARATOR>, const CwiseNullaryOp<internal::scalar_constant_op<Scalar>, PlainObject>, const Derived > RCmp ## COMPARATOR ## ReturnType; \ 00117 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const Cmp ## COMPARATOR ## ReturnType \ 00118 OP(const Scalar& s) const { \ 00119 return this->OP(Derived::PlainObject::Constant(rows(), cols(), s)); \ 00120 } \ 00121 EIGEN_DEVICE_FUNC friend EIGEN_STRONG_INLINE const RCmp ## COMPARATOR ## ReturnType \ 00122 OP(const Scalar& s, const Derived& d) { \ 00123 return Derived::PlainObject::Constant(d.rows(), d.cols(), s).OP(d); \ 00124 } 00125 00126 #define EIGEN_MAKE_CWISE_COMP_R_OP(OP, R_OP, RCOMPARATOR) \ 00127 template<typename OtherDerived> \ 00128 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const CwiseBinaryOp<internal::scalar_cmp_op<typename OtherDerived::Scalar, Scalar, internal::cmp_##RCOMPARATOR>, const OtherDerived, const Derived> \ 00129 OP(const EIGEN_CURRENT_STORAGE_BASE_CLASS<OtherDerived> &other) const \ 00130 { \ 00131 return CwiseBinaryOp<internal::scalar_cmp_op<typename OtherDerived::Scalar, Scalar, internal::cmp_##RCOMPARATOR>, const OtherDerived, const Derived>(other.derived(), derived()); \ 00132 } \ 00133 EIGEN_DEVICE_FUNC \ 00134 inline const RCmp ## RCOMPARATOR ## ReturnType \ 00135 OP(const Scalar& s) const { \ 00136 return Derived::PlainObject::Constant(rows(), cols(), s).R_OP(*this); \ 00137 } \ 00138 friend inline const Cmp ## RCOMPARATOR ## ReturnType \ 00139 OP(const Scalar& s, const Derived& d) { \ 00140 return d.R_OP(Derived::PlainObject::Constant(d.rows(), d.cols(), s)); \ 00141 } 00142 00143 00144 00152 EIGEN_MAKE_CWISE_COMP_OP(operator<, LT) 00153 00154 00161 EIGEN_MAKE_CWISE_COMP_OP(operator<=, LE) 00162 00170 EIGEN_MAKE_CWISE_COMP_R_OP(operator>, operator<, LT) 00171 00179 EIGEN_MAKE_CWISE_COMP_R_OP(operator>=, operator<=, LE) 00180 00193 EIGEN_MAKE_CWISE_COMP_OP(operator==, EQ) 00194 00207 EIGEN_MAKE_CWISE_COMP_OP(operator!=, NEQ) 00208 00209 00210 #undef EIGEN_MAKE_CWISE_COMP_OP 00211 #undef EIGEN_MAKE_CWISE_COMP_R_OP 00212 00213 // scalar addition 00214 #ifndef EIGEN_PARSED_BY_DOXYGEN 00215 EIGEN_MAKE_SCALAR_BINARY_OP(operator+,sum) 00216 #else 00217 00226 template<typename T> 00227 const CwiseBinaryOp<internal::scalar_sum_op<Scalar,T>,Derived,Constant<T> > operator+(const T& scalar) const; 00232 template<typename T> friend 00233 const CwiseBinaryOp<internal::scalar_sum_op<T,Scalar>,Constant<T>,Derived> operator+(const T& scalar, const StorageBaseType& expr); 00234 #endif 00235 00236 #ifndef EIGEN_PARSED_BY_DOXYGEN 00237 EIGEN_MAKE_SCALAR_BINARY_OP(operator-,difference) 00238 #else 00239 00248 template<typename T> 00249 const CwiseBinaryOp<internal::scalar_difference_op<Scalar,T>,Derived,Constant<T> > operator-(const T& scalar) const; 00254 template<typename T> friend 00255 const CwiseBinaryOp<internal::scalar_difference_op<T,Scalar>,Constant<T>,Derived> operator-(const T& scalar, const StorageBaseType& expr); 00256 #endif 00257 00258 00259 #ifndef EIGEN_PARSED_BY_DOXYGEN 00260 EIGEN_MAKE_SCALAR_BINARY_OP_ONTHELEFT(operator/,quotient) 00261 #else 00262 00267 template<typename T> friend 00268 inline const CwiseBinaryOp<internal::scalar_quotient_op<T,Scalar>,Constant<T>,Derived> 00269 operator/(const T& s,const StorageBaseType& a); 00270 #endif 00271 00281 template<typename OtherDerived> 00282 EIGEN_DEVICE_FUNC 00283 inline const CwiseBinaryOp<internal::scalar_boolean_xor_op, const Derived, const OtherDerived> 00284 operator^(const EIGEN_CURRENT_STORAGE_BASE_CLASS<OtherDerived> &other) const 00285 { 00286 EIGEN_STATIC_ASSERT((internal::is_same<bool,Scalar>::value && internal::is_same<bool,typename OtherDerived::Scalar>::value), 00287 THIS_METHOD_IS_ONLY_FOR_EXPRESSIONS_OF_BOOL); 00288 return CwiseBinaryOp<internal::scalar_boolean_xor_op, const Derived, const OtherDerived>(derived(),other.derived()); 00289 } 00290 00291 // NOTE disabled until we agree on argument order 00292 #if 0 00293 00303 template<typename DerivedN> 00304 inline const CwiseBinaryOp<internal::scalar_polygamma_op<Scalar>, const DerivedN, const Derived> 00305 polygamma(const EIGEN_CURRENT_STORAGE_BASE_CLASS<DerivedN> &n) const 00306 { 00307 return CwiseBinaryOp<internal::scalar_polygamma_op<Scalar>, const DerivedN, const Derived>(n.derived(), this->derived()); 00308 } 00309 #endif 00310 00327 template<typename DerivedQ> 00328 inline const CwiseBinaryOp<internal::scalar_zeta_op<Scalar>, const Derived, const DerivedQ> 00329 zeta(const EIGEN_CURRENT_STORAGE_BASE_CLASS<DerivedQ> &q) const 00330 { 00331 return CwiseBinaryOp<internal::scalar_zeta_op<Scalar>, const Derived, const DerivedQ>(this->derived(), q.derived()); 00332 }