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());
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());
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
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());
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
57 (
const Scalar &other)
const {
58 return (min<NaNPropagation>)(Derived::PlainObject::Constant(rows(), cols(), other));
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
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());
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
94 (
const Scalar &other)
const {
95 return (max<NaNPropagation>)(Derived::PlainObject::Constant(rows(), cols(), other));
105EIGEN_MAKE_CWISE_BINARY_OP(absolute_difference, absolute_difference)
111EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
const
112 CwiseBinaryOp<internal::scalar_absolute_difference_op<Scalar, Scalar>,
const Derived,
113 const CwiseNullaryOp<internal::scalar_constant_op<Scalar>, PlainObject> >
114#ifdef EIGEN_PARSED_BY_DOXYGEN
117 (absolute_difference)
119 (
const Scalar &other)
const {
120 return (absolute_difference)(Derived::PlainObject::Constant(rows(), cols(), other));
130EIGEN_MAKE_CWISE_BINARY_OP(pow, pow)
137EIGEN_MAKE_CWISE_BINARY_OP(atan2, atan2)
140#define EIGEN_MAKE_CWISE_COMP_OP(OP, COMPARATOR) \
141 template <typename OtherDerived> \
142 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const \
143 CwiseBinaryOp<internal::scalar_cmp_op<Scalar, typename OtherDerived::Scalar, internal::cmp_##COMPARATOR>, \
144 const Derived, const OtherDerived> \
145 OP(const EIGEN_CURRENT_STORAGE_BASE_CLASS<OtherDerived> &other) const { \
146 return CwiseBinaryOp<internal::scalar_cmp_op<Scalar, typename OtherDerived::Scalar, internal::cmp_##COMPARATOR>, \
147 const Derived, const OtherDerived>(derived(), other.derived()); \
149 typedef CwiseBinaryOp<internal::scalar_cmp_op<Scalar, Scalar, internal::cmp_##COMPARATOR>, const Derived, \
150 const CwiseNullaryOp<internal::scalar_constant_op<Scalar>, PlainObject> > \
151 Cmp##COMPARATOR##ReturnType; \
152 typedef CwiseBinaryOp<internal::scalar_cmp_op<Scalar, Scalar, internal::cmp_##COMPARATOR>, \
153 const CwiseNullaryOp<internal::scalar_constant_op<Scalar>, PlainObject>, const Derived> \
154 RCmp##COMPARATOR##ReturnType; \
155 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const Cmp##COMPARATOR##ReturnType OP(const Scalar &s) const { \
156 return this->OP(Derived::PlainObject::Constant(rows(), cols(), s)); \
158 EIGEN_DEVICE_FUNC friend EIGEN_STRONG_INLINE const RCmp##COMPARATOR##ReturnType OP( \
159 const Scalar &s, const EIGEN_CURRENT_STORAGE_BASE_CLASS<Derived> &d) { \
160 return Derived::PlainObject::Constant(d.rows(), d.cols(), s).OP(d); \
163#define EIGEN_MAKE_CWISE_COMP_R_OP(OP, R_OP, RCOMPARATOR) \
164 template <typename OtherDerived> \
165 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const \
166 CwiseBinaryOp<internal::scalar_cmp_op<typename OtherDerived::Scalar, Scalar, internal::cmp_##RCOMPARATOR>, \
167 const OtherDerived, const Derived> \
168 OP(const EIGEN_CURRENT_STORAGE_BASE_CLASS<OtherDerived> &other) const { \
169 return CwiseBinaryOp<internal::scalar_cmp_op<typename OtherDerived::Scalar, Scalar, internal::cmp_##RCOMPARATOR>, \
170 const OtherDerived, const Derived>(other.derived(), derived()); \
172 EIGEN_DEVICE_FUNC inline const RCmp##RCOMPARATOR##ReturnType OP(const Scalar &s) const { \
173 return Derived::PlainObject::Constant(rows(), cols(), s).R_OP(*this); \
175 friend inline const Cmp##RCOMPARATOR##ReturnType OP(const Scalar &s, const Derived &d) { \
176 return d.R_OP(Derived::PlainObject::Constant(d.rows(), d.cols(), s)); \
186EIGEN_MAKE_CWISE_COMP_OP(
operator<, LT)
195EIGEN_MAKE_CWISE_COMP_OP(
operator<=, LE)
204EIGEN_MAKE_CWISE_COMP_R_OP(
operator>,
operator<, LT)
213EIGEN_MAKE_CWISE_COMP_R_OP(
operator>=,
operator<=, LE)
227EIGEN_MAKE_CWISE_COMP_OP(
operator==, EQ)
241EIGEN_MAKE_CWISE_COMP_OP(
operator!=, NEQ)
243#undef EIGEN_MAKE_CWISE_COMP_OP
244#undef EIGEN_MAKE_CWISE_COMP_R_OP
247#ifndef EIGEN_PARSED_BY_DOXYGEN
248EIGEN_MAKE_SCALAR_BINARY_OP(
operator+, sum)
260const CwiseBinaryOp<internal::scalar_sum_op<Scalar, T>, Derived, Constant<T> > operator+(
const T &scalar)
const;
266friend const CwiseBinaryOp<internal::scalar_sum_op<T, Scalar>, Constant<T>, Derived> operator+(
267 const T &scalar,
const StorageBaseType &expr);
270#ifndef EIGEN_PARSED_BY_DOXYGEN
271EIGEN_MAKE_SCALAR_BINARY_OP(
operator-, difference)
283const CwiseBinaryOp<internal::scalar_difference_op<Scalar, T>, Derived, Constant<T> > operator-(
const T &scalar)
const;
289friend const CwiseBinaryOp<internal::scalar_difference_op<T, Scalar>, Constant<T>, Derived> operator-(
290 const T &scalar,
const StorageBaseType &expr);
293#ifndef EIGEN_PARSED_BY_DOXYGEN
294EIGEN_MAKE_SCALAR_BINARY_OP_ONTHELEFT(
operator/, quotient)
303friend inline const CwiseBinaryOp<internal::scalar_quotient_op<T, Scalar>, Constant<T>, Derived> operator/(
304 const T &s,
const StorageBaseType &a);
319template<
typename DerivedN>
320inline const CwiseBinaryOp<internal::scalar_polygamma_op<Scalar>,
const DerivedN,
const Derived>
321polygamma(
const EIGEN_CURRENT_STORAGE_BASE_CLASS<DerivedN> &n)
const
323 return CwiseBinaryOp<internal::scalar_polygamma_op<Scalar>,
const DerivedN,
const Derived>(n.derived(), this->derived());
343template <
typename DerivedQ>
344inline const CwiseBinaryOp<internal::scalar_zeta_op<Scalar>,
const Derived,
const DerivedQ> zeta(
345 const EIGEN_CURRENT_STORAGE_BASE_CLASS<DerivedQ> &q)
const {
346 return CwiseBinaryOp<internal::scalar_zeta_op<Scalar>,
const Derived,
const DerivedQ>(this->derived(), q.derived());