Eigen  3.3.3
ArrayCwiseBinaryOps.h
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 }
 All Classes Functions Variables Typedefs Enumerations Enumerator Friends