Remove const from return-by-value types (issue #1087)

libeigen/eigen!2144

Closes #1087

Co-authored-by: Rasmus Munk Larsen <rmlarsen@gmail.com>
This commit is contained in:
Rasmus Munk Larsen
2026-02-18 03:10:11 -08:00
parent 3108f6360e
commit bdec88009d
22 changed files with 123 additions and 128 deletions

View File

@@ -203,7 +203,7 @@ class LDLT : public SolverBase<LDLT<MatrixType_, UpLo_> > {
* \sa MatrixBase::ldlt(), SelfAdjointView::ldlt() * \sa MatrixBase::ldlt(), SelfAdjointView::ldlt()
*/ */
template <typename Rhs> template <typename Rhs>
inline const Solve<LDLT, Rhs> solve(const MatrixBase<Rhs>& b) const; inline Solve<LDLT, Rhs> solve(const MatrixBase<Rhs>& b) const;
#endif #endif
template <typename Derived> template <typename Derived>
@@ -642,8 +642,8 @@ MatrixType LDLT<MatrixType, UpLo_>::reconstructedMatrix() const {
* \sa MatrixBase::ldlt() * \sa MatrixBase::ldlt()
*/ */
template <typename MatrixType, unsigned int UpLo> template <typename MatrixType, unsigned int UpLo>
inline const LDLT<typename SelfAdjointView<MatrixType, UpLo>::PlainObject, UpLo> inline LDLT<typename SelfAdjointView<MatrixType, UpLo>::PlainObject, UpLo> SelfAdjointView<MatrixType, UpLo>::ldlt()
SelfAdjointView<MatrixType, UpLo>::ldlt() const { const {
return LDLT<PlainObject, UpLo>(m_matrix); return LDLT<PlainObject, UpLo>(m_matrix);
} }
@@ -652,7 +652,7 @@ SelfAdjointView<MatrixType, UpLo>::ldlt() const {
* \sa SelfAdjointView::ldlt() * \sa SelfAdjointView::ldlt()
*/ */
template <typename Derived> template <typename Derived>
inline const LDLT<typename MatrixBase<Derived>::PlainObject> MatrixBase<Derived>::ldlt() const { inline LDLT<typename MatrixBase<Derived>::PlainObject> MatrixBase<Derived>::ldlt() const {
return LDLT<PlainObject>(derived()); return LDLT<PlainObject>(derived());
} }

View File

@@ -139,7 +139,7 @@ class LLT : public SolverBase<LLT<MatrixType_, UpLo_> > {
* \sa solveInPlace(), MatrixBase::llt(), SelfAdjointView::llt() * \sa solveInPlace(), MatrixBase::llt(), SelfAdjointView::llt()
*/ */
template <typename Rhs> template <typename Rhs>
inline const Solve<LLT, Rhs> solve(const MatrixBase<Rhs>& b) const; inline Solve<LLT, Rhs> solve(const MatrixBase<Rhs>& b) const;
#endif #endif
template <typename Derived> template <typename Derived>
@@ -497,7 +497,7 @@ MatrixType LLT<MatrixType, UpLo_>::reconstructedMatrix() const {
* \sa SelfAdjointView::llt() * \sa SelfAdjointView::llt()
*/ */
template <typename Derived> template <typename Derived>
inline const LLT<typename MatrixBase<Derived>::PlainObject> MatrixBase<Derived>::llt() const { inline LLT<typename MatrixBase<Derived>::PlainObject> MatrixBase<Derived>::llt() const {
return LLT<PlainObject>(derived()); return LLT<PlainObject>(derived());
} }
@@ -506,7 +506,7 @@ inline const LLT<typename MatrixBase<Derived>::PlainObject> MatrixBase<Derived>:
* \sa SelfAdjointView::llt() * \sa SelfAdjointView::llt()
*/ */
template <typename MatrixType, unsigned int UpLo> template <typename MatrixType, unsigned int UpLo>
inline const LLT<typename SelfAdjointView<MatrixType, UpLo>::PlainObject, UpLo> SelfAdjointView<MatrixType, UpLo>::llt() inline LLT<typename SelfAdjointView<MatrixType, UpLo>::PlainObject, UpLo> SelfAdjointView<MatrixType, UpLo>::llt()
const { const {
return LLT<PlainObject, UpLo>(m_matrix); return LLT<PlainObject, UpLo>(m_matrix);
} }

View File

@@ -338,14 +338,14 @@ class MatrixBase : public DenseBase<Derived> {
/////////// LU module /////////// /////////// LU module ///////////
template <typename PermutationIndex = DefaultPermutationIndex> template <typename PermutationIndex = DefaultPermutationIndex>
inline const FullPivLU<PlainObject, PermutationIndex> fullPivLu() const; inline FullPivLU<PlainObject, PermutationIndex> fullPivLu() const;
template <typename PermutationIndex = DefaultPermutationIndex> template <typename PermutationIndex = DefaultPermutationIndex>
inline const PartialPivLU<PlainObject, PermutationIndex> partialPivLu() const; inline PartialPivLU<PlainObject, PermutationIndex> partialPivLu() const;
template <typename PermutationIndex = DefaultPermutationIndex> template <typename PermutationIndex = DefaultPermutationIndex>
inline const PartialPivLU<PlainObject, PermutationIndex> lu() const; inline PartialPivLU<PlainObject, PermutationIndex> lu() const;
EIGEN_DEVICE_FUNC inline const Inverse<Derived> inverse() const; EIGEN_DEVICE_FUNC inline Inverse<Derived> inverse() const;
template <typename ResultType> template <typename ResultType>
inline void computeInverseAndDetWithCheck( inline void computeInverseAndDetWithCheck(
@@ -361,18 +361,18 @@ class MatrixBase : public DenseBase<Derived> {
/////////// Cholesky module /////////// /////////// Cholesky module ///////////
inline const LLT<PlainObject> llt() const; inline LLT<PlainObject> llt() const;
inline const LDLT<PlainObject> ldlt() const; inline LDLT<PlainObject> ldlt() const;
/////////// QR module /////////// /////////// QR module ///////////
inline const HouseholderQR<PlainObject> householderQr() const; inline HouseholderQR<PlainObject> householderQr() const;
template <typename PermutationIndex = DefaultPermutationIndex> template <typename PermutationIndex = DefaultPermutationIndex>
inline const ColPivHouseholderQR<PlainObject, PermutationIndex> colPivHouseholderQr() const; inline ColPivHouseholderQR<PlainObject, PermutationIndex> colPivHouseholderQr() const;
template <typename PermutationIndex = DefaultPermutationIndex> template <typename PermutationIndex = DefaultPermutationIndex>
inline const FullPivHouseholderQR<PlainObject, PermutationIndex> fullPivHouseholderQr() const; inline FullPivHouseholderQR<PlainObject, PermutationIndex> fullPivHouseholderQr() const;
template <typename PermutationIndex = DefaultPermutationIndex> template <typename PermutationIndex = DefaultPermutationIndex>
inline const CompleteOrthogonalDecomposition<PlainObject, PermutationIndex> completeOrthogonalDecomposition() const; inline CompleteOrthogonalDecomposition<PlainObject, PermutationIndex> completeOrthogonalDecomposition() const;
/////////// Eigenvalues module /////////// /////////// Eigenvalues module ///////////

View File

@@ -19,7 +19,7 @@ namespace internal {
template <typename Scalar> template <typename Scalar>
struct scalar_random_op { struct scalar_random_op {
inline const Scalar operator()() const { return random<Scalar>(); } inline Scalar operator()() const { return random<Scalar>(); }
}; };
template <typename Scalar> template <typename Scalar>

View File

@@ -219,8 +219,8 @@ class SelfAdjointView : public TriangularBase<SelfAdjointView<MatrixType_, UpLo>
/////////// Cholesky module /////////// /////////// Cholesky module ///////////
const LLT<PlainObject, UpLo> llt() const; LLT<PlainObject, UpLo> llt() const;
const LDLT<PlainObject, UpLo> ldlt() const; LDLT<PlainObject, UpLo> ldlt() const;
/////////// Eigenvalue module /////////// /////////// Eigenvalue module ///////////

View File

@@ -111,7 +111,7 @@ class SolverBase : public EigenBase<Derived> {
/** \returns an expression of the solution x of \f$ A x = b \f$ using the current decomposition of A. /** \returns an expression of the solution x of \f$ A x = b \f$ using the current decomposition of A.
*/ */
template <typename Rhs> template <typename Rhs>
inline const Solve<Derived, Rhs> solve(const MatrixBase<Rhs>& b) const { inline Solve<Derived, Rhs> solve(const MatrixBase<Rhs>& b) const {
internal::solve_assertion<internal::remove_all_t<Derived>>::template run<false>(derived(), b); internal::solve_assertion<internal::remove_all_t<Derived>>::template run<false>(derived(), b);
return Solve<Derived, Rhs>(derived(), b.derived()); return Solve<Derived, Rhs>(derived(), b.derived());
} }

View File

@@ -244,7 +244,7 @@ class TriangularView
} }
template <typename Other> template <typename Other>
EIGEN_DEVICE_FUNC inline const Solve<TriangularView, Other> solve(const MatrixBase<Other>& other) const { EIGEN_DEVICE_FUNC inline Solve<TriangularView, Other> solve(const MatrixBase<Other>& other) const {
return Solve<TriangularView, Other>(*this, other.derived()); return Solve<TriangularView, Other>(*this, other.derived());
} }

View File

@@ -305,7 +305,7 @@ struct scalar_cmp_op<LhsScalar, RhsScalar, cmp_NEQ, UseTypedComparators> : binar
*/ */
template <typename Scalar> template <typename Scalar>
struct scalar_hypot_op<Scalar, Scalar> : binary_op_base<Scalar, Scalar> { struct scalar_hypot_op<Scalar, Scalar> : binary_op_base<Scalar, Scalar> {
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const Scalar operator()(const Scalar& x, const Scalar& y) const { EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Scalar operator()(const Scalar& x, const Scalar& y) const {
// This functor is used by hypotNorm only for which it is faster to first apply abs // This functor is used by hypotNorm only for which it is faster to first apply abs
// on all coefficients prior to reduction through hypot. // on all coefficients prior to reduction through hypot.
// This way we avoid calling abs on positive and real entries, and this also permits // This way we avoid calling abs on positive and real entries, and this also permits
@@ -342,7 +342,7 @@ struct scalar_pow_op : binary_op_base<Scalar, Exponent> {
} }
template <typename Packet> template <typename Packet>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const Packet packetOp(const Packet& a, const Packet& b) const { EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet packetOp(const Packet& a, const Packet& b) const {
return generic_pow(a, b); return generic_pow(a, b);
} }
}; };
@@ -368,12 +368,12 @@ struct scalar_difference_op : binary_op_base<LhsScalar, RhsScalar> {
#ifdef EIGEN_SCALAR_BINARY_OP_PLUGIN #ifdef EIGEN_SCALAR_BINARY_OP_PLUGIN
scalar_difference_op(){EIGEN_SCALAR_BINARY_OP_PLUGIN} scalar_difference_op(){EIGEN_SCALAR_BINARY_OP_PLUGIN}
#endif #endif
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const result_type EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE result_type
operator()(const LhsScalar& a, const RhsScalar& b) const { operator()(const LhsScalar& a, const RhsScalar& b) const {
return a - b; return a - b;
} }
template <typename Packet> template <typename Packet>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const Packet packetOp(const Packet& a, const Packet& b) const { EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet packetOp(const Packet& a, const Packet& b) const {
return internal::psub(a, b); return internal::psub(a, b);
} }
}; };
@@ -417,12 +417,12 @@ struct scalar_quotient_op : binary_op_base<LhsScalar, RhsScalar> {
#ifdef EIGEN_SCALAR_BINARY_OP_PLUGIN #ifdef EIGEN_SCALAR_BINARY_OP_PLUGIN
scalar_quotient_op(){EIGEN_SCALAR_BINARY_OP_PLUGIN} scalar_quotient_op(){EIGEN_SCALAR_BINARY_OP_PLUGIN}
#endif #endif
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const result_type EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE result_type
operator()(const LhsScalar& a, const RhsScalar& b) const { operator()(const LhsScalar& a, const RhsScalar& b) const {
return a / b; return a / b;
} }
template <typename Packet> template <typename Packet>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const Packet packetOp(const Packet& a, const Packet& b) const { EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet packetOp(const Packet& a, const Packet& b) const {
return internal::pdiv(a, b); return internal::pdiv(a, b);
} }
}; };
@@ -646,12 +646,12 @@ struct scalar_absolute_difference_op : binary_op_base<LhsScalar, RhsScalar> {
#ifdef EIGEN_SCALAR_BINARY_OP_PLUGIN #ifdef EIGEN_SCALAR_BINARY_OP_PLUGIN
scalar_absolute_difference_op(){EIGEN_SCALAR_BINARY_OP_PLUGIN} scalar_absolute_difference_op(){EIGEN_SCALAR_BINARY_OP_PLUGIN}
#endif #endif
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const result_type EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE result_type
operator()(const LhsScalar& a, const RhsScalar& b) const { operator()(const LhsScalar& a, const RhsScalar& b) const {
return numext::absdiff(a, b); return numext::absdiff(a, b);
} }
template <typename Packet> template <typename Packet>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const Packet packetOp(const Packet& a, const Packet& b) const { EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet packetOp(const Packet& a, const Packet& b) const {
return internal::pabsdiff(a, b); return internal::pabsdiff(a, b);
} }
}; };
@@ -704,12 +704,12 @@ struct bind1st_op : BinaryOp {
EIGEN_DEVICE_FUNC explicit bind1st_op(const first_argument_type& val) : m_value(val) {} EIGEN_DEVICE_FUNC explicit bind1st_op(const first_argument_type& val) : m_value(val) {}
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const result_type operator()(const second_argument_type& b) const { EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE result_type operator()(const second_argument_type& b) const {
return BinaryOp::operator()(m_value, b); return BinaryOp::operator()(m_value, b);
} }
template <typename Packet> template <typename Packet>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const Packet packetOp(const Packet& b) const { EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet packetOp(const Packet& b) const {
return BinaryOp::packetOp(internal::pset1<Packet>(m_value), b); return BinaryOp::packetOp(internal::pset1<Packet>(m_value), b);
} }
@@ -726,12 +726,12 @@ struct bind2nd_op : BinaryOp {
EIGEN_DEVICE_FUNC explicit bind2nd_op(const second_argument_type& val) : m_value(val) {} EIGEN_DEVICE_FUNC explicit bind2nd_op(const second_argument_type& val) : m_value(val) {}
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const result_type operator()(const first_argument_type& a) const { EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE result_type operator()(const first_argument_type& a) const {
return BinaryOp::operator()(a, m_value); return BinaryOp::operator()(a, m_value);
} }
template <typename Packet> template <typename Packet>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const Packet packetOp(const Packet& a) const { EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet packetOp(const Packet& a) const {
return BinaryOp::packetOp(a, internal::pset1<Packet>(m_value)); return BinaryOp::packetOp(a, internal::pset1<Packet>(m_value));
} }

View File

@@ -20,9 +20,9 @@ namespace internal {
template <typename Scalar> template <typename Scalar>
struct scalar_constant_op { struct scalar_constant_op {
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE scalar_constant_op(const Scalar& other) : m_other(other) {} EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE scalar_constant_op(const Scalar& other) : m_other(other) {}
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const Scalar operator()() const { return m_other; } EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Scalar operator()() const { return m_other; }
template <typename PacketType> template <typename PacketType>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const PacketType packetOp() const { EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE PacketType packetOp() const {
return internal::pset1<PacketType>(m_other); return internal::pset1<PacketType>(m_other);
} }
const Scalar m_other; const Scalar m_other;
@@ -39,9 +39,9 @@ struct functor_traits<scalar_constant_op<Scalar>> {
template <typename Scalar> template <typename Scalar>
struct scalar_zero_op { struct scalar_zero_op {
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE scalar_zero_op() = default; EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE scalar_zero_op() = default;
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const Scalar operator()() const { return Scalar(0); } EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Scalar operator()() const { return Scalar(0); }
template <typename PacketType> template <typename PacketType>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const PacketType packetOp() const { EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE PacketType packetOp() const {
return internal::pzero<PacketType>(PacketType()); return internal::pzero<PacketType>(PacketType());
} }
}; };
@@ -51,7 +51,7 @@ struct functor_traits<scalar_zero_op<Scalar>> : functor_traits<scalar_constant_o
template <typename Scalar> template <typename Scalar>
struct scalar_identity_op { struct scalar_identity_op {
template <typename IndexType> template <typename IndexType>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const Scalar operator()(IndexType row, IndexType col) const { EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Scalar operator()(IndexType row, IndexType col) const {
return row == col ? Scalar(1) : Scalar(0); return row == col ? Scalar(1) : Scalar(0);
} }
}; };
@@ -75,7 +75,7 @@ struct linspaced_op_impl<Scalar, /*IsInteger*/ false> {
m_flip(numext::abs(high) < numext::abs(low)) {} m_flip(numext::abs(high) < numext::abs(low)) {}
template <typename IndexType> template <typename IndexType>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const Scalar operator()(IndexType i) const { EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Scalar operator()(IndexType i) const {
if (m_flip) if (m_flip)
return (i == 0) ? m_low : Scalar(m_high - RealScalar(m_size1 - i) * m_step); return (i == 0) ? m_low : Scalar(m_high - RealScalar(m_size1 - i) * m_step);
else else
@@ -83,7 +83,7 @@ struct linspaced_op_impl<Scalar, /*IsInteger*/ false> {
} }
template <typename Packet, typename IndexType> template <typename Packet, typename IndexType>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const Packet packetOp(IndexType i) const { EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet packetOp(IndexType i) const {
// Principle: // Principle:
// [low, ..., low] + ( [step, ..., step] * ( [i, ..., i] + [0, ..., size] ) ) // [low, ..., low] + ( [step, ..., step] * ( [i, ..., i] + [0, ..., size] ) )
Packet low = pset1<Packet>(m_low); Packet low = pset1<Packet>(m_low);
@@ -119,7 +119,7 @@ struct linspaced_op_impl<Scalar, /*IsInteger*/ true> {
m_use_divisor(num_steps > 1 && (numext::abs(high - low) + 1) < num_steps) {} m_use_divisor(num_steps > 1 && (numext::abs(high - low) + 1) < num_steps) {}
template <typename IndexType> template <typename IndexType>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const Scalar operator()(IndexType i) const { EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Scalar operator()(IndexType i) const {
if (m_use_divisor) if (m_use_divisor)
return m_low + convert_index<Scalar>(i) / m_divisor; return m_low + convert_index<Scalar>(i) / m_divisor;
else else
@@ -155,12 +155,12 @@ struct linspaced_op {
: impl((num_steps == 1 ? high : low), high, num_steps) {} : impl((num_steps == 1 ? high : low), high, num_steps) {}
template <typename IndexType> template <typename IndexType>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const Scalar operator()(IndexType i) const { EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Scalar operator()(IndexType i) const {
return impl(i); return impl(i);
} }
template <typename Packet, typename IndexType> template <typename Packet, typename IndexType>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const Packet packetOp(IndexType i) const { EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet packetOp(IndexType i) const {
return impl.template packetOp<Packet>(i); return impl.template packetOp<Packet>(i);
} }
@@ -175,7 +175,7 @@ struct equalspaced_op {
EIGEN_DEVICE_FUNC equalspaced_op(const Scalar& start, const Scalar& step) : m_start(start), m_step(step) {} EIGEN_DEVICE_FUNC equalspaced_op(const Scalar& start, const Scalar& step) : m_start(start), m_step(step) {}
template <typename IndexType> template <typename IndexType>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const Scalar operator()(IndexType i) const { EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Scalar operator()(IndexType i) const {
return m_start + m_step * static_cast<Scalar>(i); return m_start + m_step * static_cast<Scalar>(i);
} }
template <typename Packet, typename IndexType> template <typename Packet, typename IndexType>

View File

@@ -24,9 +24,9 @@ namespace internal {
*/ */
template <typename Scalar> template <typename Scalar>
struct scalar_opposite_op { struct scalar_opposite_op {
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const Scalar operator()(const Scalar& a) const { return numext::negate(a); } EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Scalar operator()(const Scalar& a) const { return numext::negate(a); }
template <typename Packet> template <typename Packet>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const Packet packetOp(const Packet& a) const { EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet packetOp(const Packet& a) const {
return internal::pnegate(a); return internal::pnegate(a);
} }
}; };
@@ -43,9 +43,9 @@ struct functor_traits<scalar_opposite_op<Scalar>> {
template <typename Scalar> template <typename Scalar>
struct scalar_abs_op { struct scalar_abs_op {
typedef typename NumTraits<Scalar>::Real result_type; typedef typename NumTraits<Scalar>::Real result_type;
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const result_type operator()(const Scalar& a) const { return numext::abs(a); } EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE result_type operator()(const Scalar& a) const { return numext::abs(a); }
template <typename Packet> template <typename Packet>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const Packet packetOp(const Packet& a) const { EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet packetOp(const Packet& a) const {
return internal::pabs(a); return internal::pabs(a);
} }
}; };
@@ -71,7 +71,7 @@ template <typename Scalar, typename = void>
struct abs_knowing_score { struct abs_knowing_score {
typedef typename NumTraits<Scalar>::Real result_type; typedef typename NumTraits<Scalar>::Real result_type;
template <typename Score> template <typename Score>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const result_type operator()(const Scalar& a, const Score&) const { EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE result_type operator()(const Scalar& a, const Score&) const {
return numext::abs(a); return numext::abs(a);
} }
}; };
@@ -79,7 +79,7 @@ template <typename Scalar>
struct abs_knowing_score<Scalar, typename scalar_score_coeff_op<Scalar>::Score_is_abs> { struct abs_knowing_score<Scalar, typename scalar_score_coeff_op<Scalar>::Score_is_abs> {
typedef typename NumTraits<Scalar>::Real result_type; typedef typename NumTraits<Scalar>::Real result_type;
template <typename Scal> template <typename Scal>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const result_type operator()(const Scal&, const result_type& a) const { EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE result_type operator()(const Scal&, const result_type& a) const {
return a; return a;
} }
}; };
@@ -92,9 +92,9 @@ struct abs_knowing_score<Scalar, typename scalar_score_coeff_op<Scalar>::Score_i
template <typename Scalar> template <typename Scalar>
struct scalar_abs2_op { struct scalar_abs2_op {
typedef typename NumTraits<Scalar>::Real result_type; typedef typename NumTraits<Scalar>::Real result_type;
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const result_type operator()(const Scalar& a) const { return numext::abs2(a); } EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE result_type operator()(const Scalar& a) const { return numext::abs2(a); }
template <typename Packet> template <typename Packet>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const Packet packetOp(const Packet& a) const { EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet packetOp(const Packet& a) const {
return internal::pmul(a, a); return internal::pmul(a, a);
} }
}; };
@@ -113,9 +113,9 @@ struct functor_traits<scalar_abs2_op<Scalar>> {
*/ */
template <typename Scalar> template <typename Scalar>
struct scalar_conjugate_op { struct scalar_conjugate_op {
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const Scalar operator()(const Scalar& a) const { return numext::conj(a); } EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Scalar operator()(const Scalar& a) const { return numext::conj(a); }
template <typename Packet> template <typename Packet>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const Packet packetOp(const Packet& a) const { EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet packetOp(const Packet& a) const {
return internal::pconj(a); return internal::pconj(a);
} }
}; };
@@ -143,9 +143,9 @@ struct functor_traits<scalar_conjugate_op<Scalar>> {
template <typename Scalar> template <typename Scalar>
struct scalar_arg_op { struct scalar_arg_op {
typedef typename NumTraits<Scalar>::Real result_type; typedef typename NumTraits<Scalar>::Real result_type;
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const result_type operator()(const Scalar& a) const { return numext::arg(a); } EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE result_type operator()(const Scalar& a) const { return numext::arg(a); }
template <typename Packet> template <typename Packet>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const Packet packetOp(const Packet& a) const { EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet packetOp(const Packet& a) const {
return internal::parg(a); return internal::parg(a);
} }
}; };
@@ -165,11 +165,9 @@ struct functor_traits<scalar_arg_op<Scalar>> {
template <typename Scalar> template <typename Scalar>
struct scalar_carg_op { struct scalar_carg_op {
using result_type = Scalar; using result_type = Scalar;
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const Scalar operator()(const Scalar& a) const { EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Scalar operator()(const Scalar& a) const { return Scalar(numext::arg(a)); }
return Scalar(numext::arg(a));
}
template <typename Packet> template <typename Packet>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const Packet packetOp(const Packet& a) const { EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet packetOp(const Packet& a) const {
return pcarg(a); return pcarg(a);
} }
}; };
@@ -187,9 +185,7 @@ struct functor_traits<scalar_carg_op<Scalar>> {
template <typename Scalar, typename NewType> template <typename Scalar, typename NewType>
struct scalar_cast_op { struct scalar_cast_op {
typedef NewType result_type; typedef NewType result_type;
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const NewType operator()(const Scalar& a) const { EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE NewType operator()(const Scalar& a) const { return cast<Scalar, NewType>(a); }
return cast<Scalar, NewType>(a);
}
}; };
template <typename Scalar, typename NewType> template <typename Scalar, typename NewType>
@@ -222,11 +218,11 @@ struct functor_traits<core_cast_op<SrcType, DstType>> {
*/ */
template <typename Scalar, int N> template <typename Scalar, int N>
struct scalar_shift_right_op { struct scalar_shift_right_op {
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const Scalar operator()(const Scalar& a) const { EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Scalar operator()(const Scalar& a) const {
return numext::arithmetic_shift_right(a); return numext::arithmetic_shift_right(a);
} }
template <typename Packet> template <typename Packet>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const Packet packetOp(const Packet& a) const { EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet packetOp(const Packet& a) const {
return internal::parithmetic_shift_right<N>(a); return internal::parithmetic_shift_right<N>(a);
} }
}; };
@@ -242,11 +238,11 @@ struct functor_traits<scalar_shift_right_op<Scalar, N>> {
*/ */
template <typename Scalar, int N> template <typename Scalar, int N>
struct scalar_shift_left_op { struct scalar_shift_left_op {
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const Scalar operator()(const Scalar& a) const { EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Scalar operator()(const Scalar& a) const {
return numext::logical_shift_left(a); return numext::logical_shift_left(a);
} }
template <typename Packet> template <typename Packet>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const Packet packetOp(const Packet& a) const { EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet packetOp(const Packet& a) const {
return internal::plogical_shift_left<N>(a); return internal::plogical_shift_left<N>(a);
} }
}; };
@@ -329,7 +325,7 @@ struct functor_traits<scalar_imag_ref_op<Scalar>> {
*/ */
template <typename Scalar> template <typename Scalar>
struct scalar_exp_op { struct scalar_exp_op {
EIGEN_DEVICE_FUNC inline const Scalar operator()(const Scalar& a) const { return internal::pexp(a); } EIGEN_DEVICE_FUNC inline Scalar operator()(const Scalar& a) const { return internal::pexp(a); }
template <typename Packet> template <typename Packet>
EIGEN_DEVICE_FUNC inline Packet packetOp(const Packet& a) const { EIGEN_DEVICE_FUNC inline Packet packetOp(const Packet& a) const {
return internal::pexp(a); return internal::pexp(a);
@@ -361,7 +357,7 @@ struct functor_traits<scalar_exp_op<Scalar>> {
template <typename Scalar> template <typename Scalar>
struct scalar_exp2_op { struct scalar_exp2_op {
EIGEN_DEVICE_FUNC inline const Scalar operator()(const Scalar& a) const { return internal::pexp2(a); } EIGEN_DEVICE_FUNC inline Scalar operator()(const Scalar& a) const { return internal::pexp2(a); }
template <typename Packet> template <typename Packet>
EIGEN_DEVICE_FUNC inline Packet packetOp(const Packet& a) const { EIGEN_DEVICE_FUNC inline Packet packetOp(const Packet& a) const {
return internal::pexp2(a); return internal::pexp2(a);
@@ -383,7 +379,7 @@ struct functor_traits<scalar_exp2_op<Scalar>> {
*/ */
template <typename Scalar> template <typename Scalar>
struct scalar_expm1_op { struct scalar_expm1_op {
EIGEN_DEVICE_FUNC inline const Scalar operator()(const Scalar& a) const { return numext::expm1(a); } EIGEN_DEVICE_FUNC inline Scalar operator()(const Scalar& a) const { return numext::expm1(a); }
template <typename Packet> template <typename Packet>
EIGEN_DEVICE_FUNC inline Packet packetOp(const Packet& a) const { EIGEN_DEVICE_FUNC inline Packet packetOp(const Packet& a) const {
return internal::pexpm1(a); return internal::pexpm1(a);
@@ -405,7 +401,7 @@ struct functor_traits<scalar_expm1_op<Scalar>> {
*/ */
template <typename Scalar> template <typename Scalar>
struct scalar_log_op { struct scalar_log_op {
EIGEN_DEVICE_FUNC inline const Scalar operator()(const Scalar& a) const { return numext::log(a); } EIGEN_DEVICE_FUNC inline Scalar operator()(const Scalar& a) const { return numext::log(a); }
template <typename Packet> template <typename Packet>
EIGEN_DEVICE_FUNC inline Packet packetOp(const Packet& a) const { EIGEN_DEVICE_FUNC inline Packet packetOp(const Packet& a) const {
return internal::plog(a); return internal::plog(a);
@@ -437,7 +433,7 @@ struct functor_traits<scalar_log_op<Scalar>> {
*/ */
template <typename Scalar> template <typename Scalar>
struct scalar_log1p_op { struct scalar_log1p_op {
EIGEN_DEVICE_FUNC inline const Scalar operator()(const Scalar& a) const { return numext::log1p(a); } EIGEN_DEVICE_FUNC inline Scalar operator()(const Scalar& a) const { return numext::log1p(a); }
template <typename Packet> template <typename Packet>
EIGEN_DEVICE_FUNC inline Packet packetOp(const Packet& a) const { EIGEN_DEVICE_FUNC inline Packet packetOp(const Packet& a) const {
return internal::plog1p(a); return internal::plog1p(a);
@@ -459,7 +455,7 @@ struct functor_traits<scalar_log1p_op<Scalar>> {
*/ */
template <typename Scalar> template <typename Scalar>
struct scalar_log10_op { struct scalar_log10_op {
EIGEN_DEVICE_FUNC inline const Scalar operator()(const Scalar& a) const { EIGEN_USING_STD(log10) return log10(a); } EIGEN_DEVICE_FUNC inline Scalar operator()(const Scalar& a) const { EIGEN_USING_STD(log10) return log10(a); }
template <typename Packet> template <typename Packet>
EIGEN_DEVICE_FUNC inline Packet packetOp(const Packet& a) const { EIGEN_DEVICE_FUNC inline Packet packetOp(const Packet& a) const {
return internal::plog10(a); return internal::plog10(a);
@@ -479,7 +475,7 @@ struct functor_traits<scalar_log10_op<Scalar>> {
template <typename Scalar> template <typename Scalar>
struct scalar_log2_op { struct scalar_log2_op {
using RealScalar = typename NumTraits<Scalar>::Real; using RealScalar = typename NumTraits<Scalar>::Real;
EIGEN_DEVICE_FUNC inline const Scalar operator()(const Scalar& a) const { EIGEN_DEVICE_FUNC inline Scalar operator()(const Scalar& a) const {
return Scalar(RealScalar(EIGEN_LOG2E)) * numext::log(a); return Scalar(RealScalar(EIGEN_LOG2E)) * numext::log(a);
} }
template <typename Packet> template <typename Packet>
@@ -498,7 +494,7 @@ struct functor_traits<scalar_log2_op<Scalar>> {
*/ */
template <typename Scalar> template <typename Scalar>
struct scalar_sqrt_op { struct scalar_sqrt_op {
EIGEN_DEVICE_FUNC inline const Scalar operator()(const Scalar& a) const { return numext::sqrt(a); } EIGEN_DEVICE_FUNC inline Scalar operator()(const Scalar& a) const { return numext::sqrt(a); }
template <typename Packet> template <typename Packet>
EIGEN_DEVICE_FUNC inline Packet packetOp(const Packet& a) const { EIGEN_DEVICE_FUNC inline Packet packetOp(const Packet& a) const {
return internal::psqrt(a); return internal::psqrt(a);
@@ -540,7 +536,7 @@ struct functor_traits<scalar_sqrt_op<bool>> {
*/ */
template <typename Scalar> template <typename Scalar>
struct scalar_cbrt_op { struct scalar_cbrt_op {
EIGEN_DEVICE_FUNC inline const Scalar operator()(const Scalar& a) const { return numext::cbrt(a); } EIGEN_DEVICE_FUNC inline Scalar operator()(const Scalar& a) const { return numext::cbrt(a); }
template <typename Packet> template <typename Packet>
EIGEN_DEVICE_FUNC inline Packet packetOp(const Packet& a) const { EIGEN_DEVICE_FUNC inline Packet packetOp(const Packet& a) const {
return internal::pcbrt(a); return internal::pcbrt(a);
@@ -558,7 +554,7 @@ struct functor_traits<scalar_cbrt_op<Scalar>> {
*/ */
template <typename Scalar> template <typename Scalar>
struct scalar_rsqrt_op { struct scalar_rsqrt_op {
EIGEN_DEVICE_FUNC inline const Scalar operator()(const Scalar& a) const { return numext::rsqrt(a); } EIGEN_DEVICE_FUNC inline Scalar operator()(const Scalar& a) const { return numext::rsqrt(a); }
template <typename Packet> template <typename Packet>
EIGEN_DEVICE_FUNC inline Packet packetOp(const Packet& a) const { EIGEN_DEVICE_FUNC inline Packet packetOp(const Packet& a) const {
return internal::prsqrt(a); return internal::prsqrt(a);
@@ -593,7 +589,7 @@ struct functor_traits<scalar_cos_op<Scalar>> {
*/ */
template <typename Scalar> template <typename Scalar>
struct scalar_sin_op { struct scalar_sin_op {
EIGEN_DEVICE_FUNC inline const Scalar operator()(const Scalar& a) const { return numext::sin(a); } EIGEN_DEVICE_FUNC inline Scalar operator()(const Scalar& a) const { return numext::sin(a); }
template <typename Packet> template <typename Packet>
EIGEN_DEVICE_FUNC inline Packet packetOp(const Packet& a) const { EIGEN_DEVICE_FUNC inline Packet packetOp(const Packet& a) const {
return internal::psin(a); return internal::psin(a);
@@ -610,7 +606,7 @@ struct functor_traits<scalar_sin_op<Scalar>> {
*/ */
template <typename Scalar> template <typename Scalar>
struct scalar_tan_op { struct scalar_tan_op {
EIGEN_DEVICE_FUNC inline const Scalar operator()(const Scalar& a) const { return numext::tan(a); } EIGEN_DEVICE_FUNC inline Scalar operator()(const Scalar& a) const { return numext::tan(a); }
template <typename Packet> template <typename Packet>
EIGEN_DEVICE_FUNC inline Packet packetOp(const Packet& a) const { EIGEN_DEVICE_FUNC inline Packet packetOp(const Packet& a) const {
return internal::ptan(a); return internal::ptan(a);
@@ -627,7 +623,7 @@ struct functor_traits<scalar_tan_op<Scalar>> {
*/ */
template <typename Scalar> template <typename Scalar>
struct scalar_acos_op { struct scalar_acos_op {
EIGEN_DEVICE_FUNC inline const Scalar operator()(const Scalar& a) const { return numext::acos(a); } EIGEN_DEVICE_FUNC inline Scalar operator()(const Scalar& a) const { return numext::acos(a); }
template <typename Packet> template <typename Packet>
EIGEN_DEVICE_FUNC inline Packet packetOp(const Packet& a) const { EIGEN_DEVICE_FUNC inline Packet packetOp(const Packet& a) const {
return internal::pacos(a); return internal::pacos(a);
@@ -644,7 +640,7 @@ struct functor_traits<scalar_acos_op<Scalar>> {
*/ */
template <typename Scalar> template <typename Scalar>
struct scalar_asin_op { struct scalar_asin_op {
EIGEN_DEVICE_FUNC inline const Scalar operator()(const Scalar& a) const { return numext::asin(a); } EIGEN_DEVICE_FUNC inline Scalar operator()(const Scalar& a) const { return numext::asin(a); }
template <typename Packet> template <typename Packet>
EIGEN_DEVICE_FUNC inline Packet packetOp(const Packet& a) const { EIGEN_DEVICE_FUNC inline Packet packetOp(const Packet& a) const {
return internal::pasin(a); return internal::pasin(a);
@@ -661,7 +657,7 @@ struct functor_traits<scalar_asin_op<Scalar>> {
*/ */
template <typename Scalar> template <typename Scalar>
struct scalar_atan_op { struct scalar_atan_op {
EIGEN_DEVICE_FUNC inline const Scalar operator()(const Scalar& a) const { return numext::atan(a); } EIGEN_DEVICE_FUNC inline Scalar operator()(const Scalar& a) const { return numext::atan(a); }
template <typename Packet> template <typename Packet>
EIGEN_DEVICE_FUNC inline Packet packetOp(const Packet& a) const { EIGEN_DEVICE_FUNC inline Packet packetOp(const Packet& a) const {
return internal::patan(a); return internal::patan(a);
@@ -678,7 +674,7 @@ struct functor_traits<scalar_atan_op<Scalar>> {
*/ */
template <typename Scalar> template <typename Scalar>
struct scalar_tanh_op { struct scalar_tanh_op {
EIGEN_DEVICE_FUNC inline const Scalar operator()(const Scalar& a) const { return numext::tanh(a); } EIGEN_DEVICE_FUNC inline Scalar operator()(const Scalar& a) const { return numext::tanh(a); }
template <typename Packet> template <typename Packet>
EIGEN_DEVICE_FUNC inline Packet packetOp(const Packet& x) const { EIGEN_DEVICE_FUNC inline Packet packetOp(const Packet& x) const {
return ptanh(x); return ptanh(x);
@@ -713,7 +709,7 @@ struct functor_traits<scalar_tanh_op<Scalar>> {
*/ */
template <typename Scalar> template <typename Scalar>
struct scalar_atanh_op { struct scalar_atanh_op {
EIGEN_DEVICE_FUNC inline const Scalar operator()(const Scalar& a) const { return numext::atanh(a); } EIGEN_DEVICE_FUNC inline Scalar operator()(const Scalar& a) const { return numext::atanh(a); }
template <typename Packet> template <typename Packet>
EIGEN_DEVICE_FUNC inline Packet packetOp(const Packet& x) const { EIGEN_DEVICE_FUNC inline Packet packetOp(const Packet& x) const {
return patanh(x); return patanh(x);
@@ -731,7 +727,7 @@ struct functor_traits<scalar_atanh_op<Scalar>> {
*/ */
template <typename Scalar> template <typename Scalar>
struct scalar_sinh_op { struct scalar_sinh_op {
EIGEN_DEVICE_FUNC inline const Scalar operator()(const Scalar& a) const { return numext::sinh(a); } EIGEN_DEVICE_FUNC inline Scalar operator()(const Scalar& a) const { return numext::sinh(a); }
template <typename Packet> template <typename Packet>
EIGEN_DEVICE_FUNC inline Packet packetOp(const Packet& a) const { EIGEN_DEVICE_FUNC inline Packet packetOp(const Packet& a) const {
return internal::psinh(a); return internal::psinh(a);
@@ -748,7 +744,7 @@ struct functor_traits<scalar_sinh_op<Scalar>> {
*/ */
template <typename Scalar> template <typename Scalar>
struct scalar_asinh_op { struct scalar_asinh_op {
EIGEN_DEVICE_FUNC inline const Scalar operator()(const Scalar& a) const { return numext::asinh(a); } EIGEN_DEVICE_FUNC inline Scalar operator()(const Scalar& a) const { return numext::asinh(a); }
}; };
template <typename Scalar> template <typename Scalar>
@@ -762,7 +758,7 @@ struct functor_traits<scalar_asinh_op<Scalar>> {
*/ */
template <typename Scalar> template <typename Scalar>
struct scalar_cosh_op { struct scalar_cosh_op {
EIGEN_DEVICE_FUNC inline const Scalar operator()(const Scalar& a) const { return numext::cosh(a); } EIGEN_DEVICE_FUNC inline Scalar operator()(const Scalar& a) const { return numext::cosh(a); }
template <typename Packet> template <typename Packet>
EIGEN_DEVICE_FUNC inline Packet packetOp(const Packet& a) const { EIGEN_DEVICE_FUNC inline Packet packetOp(const Packet& a) const {
return internal::pcosh(a); return internal::pcosh(a);
@@ -779,7 +775,7 @@ struct functor_traits<scalar_cosh_op<Scalar>> {
*/ */
template <typename Scalar> template <typename Scalar>
struct scalar_acosh_op { struct scalar_acosh_op {
EIGEN_DEVICE_FUNC inline const Scalar operator()(const Scalar& a) const { return numext::acosh(a); } EIGEN_DEVICE_FUNC inline Scalar operator()(const Scalar& a) const { return numext::acosh(a); }
}; };
template <typename Scalar> template <typename Scalar>
@@ -795,7 +791,7 @@ template <typename Scalar>
struct scalar_inverse_op { struct scalar_inverse_op {
EIGEN_DEVICE_FUNC inline Scalar operator()(const Scalar& a) const { return Scalar(1) / a; } EIGEN_DEVICE_FUNC inline Scalar operator()(const Scalar& a) const { return Scalar(1) / a; }
template <typename Packet> template <typename Packet>
EIGEN_DEVICE_FUNC inline const Packet packetOp(const Packet& a) const { EIGEN_DEVICE_FUNC inline Packet packetOp(const Packet& a) const {
return internal::preciprocal(a); return internal::preciprocal(a);
} }
}; };
@@ -819,7 +815,7 @@ template <typename Scalar>
struct scalar_square_op { struct scalar_square_op {
EIGEN_DEVICE_FUNC inline Scalar operator()(const Scalar& a) const { return a * a; } EIGEN_DEVICE_FUNC inline Scalar operator()(const Scalar& a) const { return a * a; }
template <typename Packet> template <typename Packet>
EIGEN_DEVICE_FUNC inline const Packet packetOp(const Packet& a) const { EIGEN_DEVICE_FUNC inline Packet packetOp(const Packet& a) const {
return internal::pmul(a, a); return internal::pmul(a, a);
} }
}; };
@@ -833,7 +829,7 @@ template <>
struct scalar_square_op<bool> { struct scalar_square_op<bool> {
EIGEN_DEPRECATED EIGEN_DEVICE_FUNC inline bool operator()(const bool& a) const { return a; } EIGEN_DEPRECATED EIGEN_DEVICE_FUNC inline bool operator()(const bool& a) const { return a; }
template <typename Packet> template <typename Packet>
EIGEN_DEPRECATED EIGEN_DEVICE_FUNC inline const Packet packetOp(const Packet& a) const { EIGEN_DEPRECATED EIGEN_DEVICE_FUNC inline Packet packetOp(const Packet& a) const {
return a; return a;
} }
}; };
@@ -850,7 +846,7 @@ template <typename Scalar>
struct scalar_cube_op { struct scalar_cube_op {
EIGEN_DEVICE_FUNC inline Scalar operator()(const Scalar& a) const { return a * a * a; } EIGEN_DEVICE_FUNC inline Scalar operator()(const Scalar& a) const { return a * a * a; }
template <typename Packet> template <typename Packet>
EIGEN_DEVICE_FUNC inline const Packet packetOp(const Packet& a) const { EIGEN_DEVICE_FUNC inline Packet packetOp(const Packet& a) const {
return internal::pmul(a, pmul(a, a)); return internal::pmul(a, pmul(a, a));
} }
}; };
@@ -864,7 +860,7 @@ template <>
struct scalar_cube_op<bool> { struct scalar_cube_op<bool> {
EIGEN_DEPRECATED EIGEN_DEVICE_FUNC inline bool operator()(const bool& a) const { return a; } EIGEN_DEPRECATED EIGEN_DEVICE_FUNC inline bool operator()(const bool& a) const { return a; }
template <typename Packet> template <typename Packet>
EIGEN_DEPRECATED EIGEN_DEVICE_FUNC inline const Packet packetOp(const Packet& a) const { EIGEN_DEPRECATED EIGEN_DEVICE_FUNC inline Packet packetOp(const Packet& a) const {
return a; return a;
} }
}; };
@@ -879,7 +875,7 @@ struct functor_traits<scalar_cube_op<bool>> {
*/ */
template <typename Scalar> template <typename Scalar>
struct scalar_round_op { struct scalar_round_op {
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const Scalar operator()(const Scalar& a) const { return numext::round(a); } EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Scalar operator()(const Scalar& a) const { return numext::round(a); }
template <typename Packet> template <typename Packet>
EIGEN_DEVICE_FUNC inline Packet packetOp(const Packet& a) const { EIGEN_DEVICE_FUNC inline Packet packetOp(const Packet& a) const {
return internal::pround(a); return internal::pround(a);
@@ -899,7 +895,7 @@ struct functor_traits<scalar_round_op<Scalar>> {
*/ */
template <typename Scalar> template <typename Scalar>
struct scalar_floor_op { struct scalar_floor_op {
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const Scalar operator()(const Scalar& a) const { return numext::floor(a); } EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Scalar operator()(const Scalar& a) const { return numext::floor(a); }
template <typename Packet> template <typename Packet>
EIGEN_DEVICE_FUNC inline Packet packetOp(const Packet& a) const { EIGEN_DEVICE_FUNC inline Packet packetOp(const Packet& a) const {
return internal::pfloor(a); return internal::pfloor(a);
@@ -919,7 +915,7 @@ struct functor_traits<scalar_floor_op<Scalar>> {
*/ */
template <typename Scalar> template <typename Scalar>
struct scalar_rint_op { struct scalar_rint_op {
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const Scalar operator()(const Scalar& a) const { return numext::rint(a); } EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Scalar operator()(const Scalar& a) const { return numext::rint(a); }
template <typename Packet> template <typename Packet>
EIGEN_DEVICE_FUNC inline Packet packetOp(const Packet& a) const { EIGEN_DEVICE_FUNC inline Packet packetOp(const Packet& a) const {
return internal::print(a); return internal::print(a);
@@ -939,7 +935,7 @@ struct functor_traits<scalar_rint_op<Scalar>> {
*/ */
template <typename Scalar> template <typename Scalar>
struct scalar_ceil_op { struct scalar_ceil_op {
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const Scalar operator()(const Scalar& a) const { return numext::ceil(a); } EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Scalar operator()(const Scalar& a) const { return numext::ceil(a); }
template <typename Packet> template <typename Packet>
EIGEN_DEVICE_FUNC inline Packet packetOp(const Packet& a) const { EIGEN_DEVICE_FUNC inline Packet packetOp(const Packet& a) const {
return internal::pceil(a); return internal::pceil(a);
@@ -959,7 +955,7 @@ struct functor_traits<scalar_ceil_op<Scalar>> {
*/ */
template <typename Scalar> template <typename Scalar>
struct scalar_trunc_op { struct scalar_trunc_op {
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const Scalar operator()(const Scalar& a) const { return numext::trunc(a); } EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Scalar operator()(const Scalar& a) const { return numext::trunc(a); }
template <typename Packet> template <typename Packet>
EIGEN_DEVICE_FUNC inline Packet packetOp(const Packet& a) const { EIGEN_DEVICE_FUNC inline Packet packetOp(const Packet& a) const {
return internal::ptrunc(a); return internal::ptrunc(a);
@@ -1153,7 +1149,7 @@ struct functor_traits<scalar_bitwise_not_op<Scalar>> {
*/ */
template <typename Scalar> template <typename Scalar>
struct scalar_sign_op { struct scalar_sign_op {
EIGEN_DEVICE_FUNC inline const Scalar operator()(const Scalar& a) const { return numext::sign(a); } EIGEN_DEVICE_FUNC inline Scalar operator()(const Scalar& a) const { return numext::sign(a); }
template <typename Packet> template <typename Packet>
EIGEN_DEVICE_FUNC inline Packet packetOp(const Packet& a) const { EIGEN_DEVICE_FUNC inline Packet packetOp(const Packet& a) const {

View File

@@ -86,7 +86,7 @@ class DiagonalPreconditioner {
} }
template <typename Rhs> template <typename Rhs>
inline const Solve<DiagonalPreconditioner, Rhs> solve(const MatrixBase<Rhs>& b) const { inline Solve<DiagonalPreconditioner, Rhs> solve(const MatrixBase<Rhs>& b) const {
eigen_assert(m_isInitialized && "DiagonalPreconditioner is not initialized."); eigen_assert(m_isInitialized && "DiagonalPreconditioner is not initialized.");
eigen_assert(m_invdiag.size() == b.rows() && eigen_assert(m_invdiag.size() == b.rows() &&
"DiagonalPreconditioner::solve(): invalid number of rows of the right hand side matrix b"); "DiagonalPreconditioner::solve(): invalid number of rows of the right hand side matrix b");

View File

@@ -247,7 +247,7 @@ class FullPivLU : public SolverBase<FullPivLU<MatrixType_, PermutationIndex_> >
* \sa TriangularView::solve(), kernel(), inverse() * \sa TriangularView::solve(), kernel(), inverse()
*/ */
template <typename Rhs> template <typename Rhs>
inline const Solve<FullPivLU, Rhs> solve(const MatrixBase<Rhs>& b) const; inline Solve<FullPivLU, Rhs> solve(const MatrixBase<Rhs>& b) const;
#endif #endif
/** \returns an estimate of the reciprocal condition number of the matrix of which \c *this is /** \returns an estimate of the reciprocal condition number of the matrix of which \c *this is
@@ -394,7 +394,7 @@ class FullPivLU : public SolverBase<FullPivLU<MatrixType_, PermutationIndex_> >
* *
* \sa MatrixBase::inverse() * \sa MatrixBase::inverse()
*/ */
inline const Inverse<FullPivLU> inverse() const { inline Inverse<FullPivLU> inverse() const {
eigen_assert(m_isInitialized && "LU is not initialized."); eigen_assert(m_isInitialized && "LU is not initialized.");
eigen_assert(m_lu.rows() == m_lu.cols() && "You can't take the inverse of a non-square matrix!"); eigen_assert(m_lu.rows() == m_lu.cols() && "You can't take the inverse of a non-square matrix!");
return Inverse<FullPivLU>(*this); return Inverse<FullPivLU>(*this);
@@ -816,8 +816,7 @@ struct Assignment<
*/ */
template <typename Derived> template <typename Derived>
template <typename PermutationIndex> template <typename PermutationIndex>
inline const FullPivLU<typename MatrixBase<Derived>::PlainObject, PermutationIndex> MatrixBase<Derived>::fullPivLu() inline FullPivLU<typename MatrixBase<Derived>::PlainObject, PermutationIndex> MatrixBase<Derived>::fullPivLu() const {
const {
return FullPivLU<PlainObject, PermutationIndex>(eval()); return FullPivLU<PlainObject, PermutationIndex>(eval());
} }

View File

@@ -276,7 +276,7 @@ struct Assignment<DstXprType, Inverse<XprType>,
* \sa computeInverseAndDetWithCheck() * \sa computeInverseAndDetWithCheck()
*/ */
template <typename Derived> template <typename Derived>
EIGEN_DEVICE_FUNC inline const Inverse<Derived> MatrixBase<Derived>::inverse() const { EIGEN_DEVICE_FUNC inline Inverse<Derived> MatrixBase<Derived>::inverse() const {
EIGEN_STATIC_ASSERT(!NumTraits<Scalar>::IsInteger, THIS_FUNCTION_IS_NOT_FOR_INTEGER_NUMERIC_TYPES) EIGEN_STATIC_ASSERT(!NumTraits<Scalar>::IsInteger, THIS_FUNCTION_IS_NOT_FOR_INTEGER_NUMERIC_TYPES)
eigen_assert(rows() == cols()); eigen_assert(rows() == cols());
return Inverse<Derived>(derived()); return Inverse<Derived>(derived());

View File

@@ -181,7 +181,7 @@ class PartialPivLU : public SolverBase<PartialPivLU<MatrixType_, PermutationInde
* \sa TriangularView::solve(), inverse(), computeInverse() * \sa TriangularView::solve(), inverse(), computeInverse()
*/ */
template <typename Rhs> template <typename Rhs>
inline const Solve<PartialPivLU, Rhs> solve(const MatrixBase<Rhs>& b) const; inline Solve<PartialPivLU, Rhs> solve(const MatrixBase<Rhs>& b) const;
#endif #endif
/** \returns an estimate of the reciprocal condition number of the matrix of which \c *this is /** \returns an estimate of the reciprocal condition number of the matrix of which \c *this is
@@ -199,7 +199,7 @@ class PartialPivLU : public SolverBase<PartialPivLU<MatrixType_, PermutationInde
* *
* \sa MatrixBase::inverse(), LU::inverse() * \sa MatrixBase::inverse(), LU::inverse()
*/ */
inline const Inverse<PartialPivLU> inverse() const { inline Inverse<PartialPivLU> inverse() const {
eigen_assert(m_isInitialized && "PartialPivLU is not initialized."); eigen_assert(m_isInitialized && "PartialPivLU is not initialized.");
return Inverse<PartialPivLU>(*this); return Inverse<PartialPivLU>(*this);
} }
@@ -562,8 +562,8 @@ struct Assignment<
*/ */
template <typename Derived> template <typename Derived>
template <typename PermutationIndex> template <typename PermutationIndex>
inline const PartialPivLU<typename MatrixBase<Derived>::PlainObject, PermutationIndex> inline PartialPivLU<typename MatrixBase<Derived>::PlainObject, PermutationIndex> MatrixBase<Derived>::partialPivLu()
MatrixBase<Derived>::partialPivLu() const { const {
return PartialPivLU<PlainObject, PermutationIndex>(eval()); return PartialPivLU<PlainObject, PermutationIndex>(eval());
} }
@@ -577,7 +577,7 @@ MatrixBase<Derived>::partialPivLu() const {
*/ */
template <typename Derived> template <typename Derived>
template <typename PermutationIndex> template <typename PermutationIndex>
inline const PartialPivLU<typename MatrixBase<Derived>::PlainObject, PermutationIndex> MatrixBase<Derived>::lu() const { inline PartialPivLU<typename MatrixBase<Derived>::PlainObject, PermutationIndex> MatrixBase<Derived>::lu() const {
return PartialPivLU<PlainObject, PermutationIndex>(eval()); return PartialPivLU<PlainObject, PermutationIndex>(eval());
} }

View File

@@ -158,7 +158,7 @@ class ColPivHouseholderQR : public SolverBase<ColPivHouseholderQR<MatrixType_, P
* Output: \verbinclude ColPivHouseholderQR_solve.out * Output: \verbinclude ColPivHouseholderQR_solve.out
*/ */
template <typename Rhs> template <typename Rhs>
inline const Solve<ColPivHouseholderQR, Rhs> solve(const MatrixBase<Rhs>& b) const; inline Solve<ColPivHouseholderQR, Rhs> solve(const MatrixBase<Rhs>& b) const;
#endif #endif
HouseholderSequenceType householderQ() const; HouseholderSequenceType householderQ() const;
@@ -318,7 +318,7 @@ class ColPivHouseholderQR : public SolverBase<ColPivHouseholderQR<MatrixType_, P
* \note If this matrix is not invertible, the returned matrix has undefined coefficients. * \note If this matrix is not invertible, the returned matrix has undefined coefficients.
* Use isInvertible() to first determine whether this matrix is invertible. * Use isInvertible() to first determine whether this matrix is invertible.
*/ */
inline const Inverse<ColPivHouseholderQR> inverse() const { inline Inverse<ColPivHouseholderQR> inverse() const {
eigen_assert(m_isInitialized && "ColPivHouseholderQR is not initialized."); eigen_assert(m_isInitialized && "ColPivHouseholderQR is not initialized.");
return Inverse<ColPivHouseholderQR>(*this); return Inverse<ColPivHouseholderQR>(*this);
} }
@@ -664,7 +664,7 @@ ColPivHouseholderQR<MatrixType, PermutationIndex>::householderQ() const {
*/ */
template <typename Derived> template <typename Derived>
template <typename PermutationIndexType> template <typename PermutationIndexType>
const ColPivHouseholderQR<typename MatrixBase<Derived>::PlainObject, PermutationIndexType> ColPivHouseholderQR<typename MatrixBase<Derived>::PlainObject, PermutationIndexType>
MatrixBase<Derived>::colPivHouseholderQr() const { MatrixBase<Derived>::colPivHouseholderQr() const {
return ColPivHouseholderQR<PlainObject, PermutationIndexType>(eval()); return ColPivHouseholderQR<PlainObject, PermutationIndexType>(eval());
} }

View File

@@ -140,7 +140,7 @@ class CompleteOrthogonalDecomposition
* *
*/ */
template <typename Rhs> template <typename Rhs>
inline const Solve<CompleteOrthogonalDecomposition, Rhs> solve(const MatrixBase<Rhs>& b) const; inline Solve<CompleteOrthogonalDecomposition, Rhs> solve(const MatrixBase<Rhs>& b) const;
#endif #endif
HouseholderSequenceType householderQ(void) const; HouseholderSequenceType householderQ(void) const;
@@ -293,7 +293,7 @@ class CompleteOrthogonalDecomposition
* \warning: Do not compute \c this->pseudoInverse()*rhs to solve a linear systems. * \warning: Do not compute \c this->pseudoInverse()*rhs to solve a linear systems.
* It is more efficient and numerically stable to call \c this->solve(rhs). * It is more efficient and numerically stable to call \c this->solve(rhs).
*/ */
inline const Inverse<CompleteOrthogonalDecomposition> pseudoInverse() const { inline Inverse<CompleteOrthogonalDecomposition> pseudoInverse() const {
eigen_assert(m_cpqr.m_isInitialized && "CompleteOrthogonalDecomposition is not initialized."); eigen_assert(m_cpqr.m_isInitialized && "CompleteOrthogonalDecomposition is not initialized.");
return Inverse<CompleteOrthogonalDecomposition>(*this); return Inverse<CompleteOrthogonalDecomposition>(*this);
} }
@@ -638,7 +638,7 @@ CompleteOrthogonalDecomposition<MatrixType, PermutationIndex>::householderQ() co
*/ */
template <typename Derived> template <typename Derived>
template <typename PermutationIndex> template <typename PermutationIndex>
const CompleteOrthogonalDecomposition<typename MatrixBase<Derived>::PlainObject, PermutationIndex> CompleteOrthogonalDecomposition<typename MatrixBase<Derived>::PlainObject, PermutationIndex>
MatrixBase<Derived>::completeOrthogonalDecomposition() const { MatrixBase<Derived>::completeOrthogonalDecomposition() const {
return CompleteOrthogonalDecomposition<PlainObject>(eval()); return CompleteOrthogonalDecomposition<PlainObject>(eval());
} }

View File

@@ -186,7 +186,7 @@ class FullPivHouseholderQR : public SolverBase<FullPivHouseholderQR<MatrixType_,
* Output: \verbinclude FullPivHouseholderQR_solve.out * Output: \verbinclude FullPivHouseholderQR_solve.out
*/ */
template <typename Rhs> template <typename Rhs>
inline const Solve<FullPivHouseholderQR, Rhs> solve(const MatrixBase<Rhs>& b) const; inline Solve<FullPivHouseholderQR, Rhs> solve(const MatrixBase<Rhs>& b) const;
#endif #endif
/** \returns Expression object representing the matrix Q /** \returns Expression object representing the matrix Q
@@ -339,7 +339,7 @@ class FullPivHouseholderQR : public SolverBase<FullPivHouseholderQR<MatrixType_,
* \note If this matrix is not invertible, the returned matrix has undefined coefficients. * \note If this matrix is not invertible, the returned matrix has undefined coefficients.
* Use isInvertible() to first determine whether this matrix is invertible. * Use isInvertible() to first determine whether this matrix is invertible.
*/ */
inline const Inverse<FullPivHouseholderQR> inverse() const { inline Inverse<FullPivHouseholderQR> inverse() const {
eigen_assert(m_isInitialized && "FullPivHouseholderQR is not initialized."); eigen_assert(m_isInitialized && "FullPivHouseholderQR is not initialized.");
return Inverse<FullPivHouseholderQR>(*this); return Inverse<FullPivHouseholderQR>(*this);
} }
@@ -723,7 +723,7 @@ FullPivHouseholderQR<MatrixType, PermutationIndex>::matrixQ() const {
*/ */
template <typename Derived> template <typename Derived>
template <typename PermutationIndex> template <typename PermutationIndex>
const FullPivHouseholderQR<typename MatrixBase<Derived>::PlainObject, PermutationIndex> FullPivHouseholderQR<typename MatrixBase<Derived>::PlainObject, PermutationIndex>
MatrixBase<Derived>::fullPivHouseholderQr() const { MatrixBase<Derived>::fullPivHouseholderQr() const {
return FullPivHouseholderQR<PlainObject, PermutationIndex>(eval()); return FullPivHouseholderQR<PlainObject, PermutationIndex>(eval());
} }

View File

@@ -156,7 +156,7 @@ class HouseholderQR : public SolverBase<HouseholderQR<MatrixType_>> {
* Output: \verbinclude HouseholderQR_solve.out * Output: \verbinclude HouseholderQR_solve.out
*/ */
template <typename Rhs> template <typename Rhs>
inline const Solve<HouseholderQR, Rhs> solve(const MatrixBase<Rhs>& b) const; inline Solve<HouseholderQR, Rhs> solve(const MatrixBase<Rhs>& b) const;
#endif #endif
/** This method returns an expression of the unitary matrix Q as a sequence of Householder transformations. /** This method returns an expression of the unitary matrix Q as a sequence of Householder transformations.
@@ -534,7 +534,7 @@ void HouseholderQR<MatrixType>::computeInPlace() {
* \sa class HouseholderQR * \sa class HouseholderQR
*/ */
template <typename Derived> template <typename Derived>
const HouseholderQR<typename MatrixBase<Derived>::PlainObject> MatrixBase<Derived>::householderQr() const { HouseholderQR<typename MatrixBase<Derived>::PlainObject> MatrixBase<Derived>::householderQr() const {
return HouseholderQR<PlainObject>(eval()); return HouseholderQR<PlainObject>(eval());
} }

View File

@@ -290,7 +290,7 @@ class SVDBase : public SolverBase<SVDBase<Derived> > {
* A x - b \Vert \f$. * A x - b \Vert \f$.
*/ */
template <typename Rhs> template <typename Rhs>
inline const Solve<Derived, Rhs> solve(const MatrixBase<Rhs>& b) const; inline Solve<Derived, Rhs> solve(const MatrixBase<Rhs>& b) const;
#endif #endif
/** \brief Reports whether previous computation was successful. /** \brief Reports whether previous computation was successful.

View File

@@ -81,7 +81,7 @@ class SparseSolverBase : internal::noncopyable {
* \sa compute() * \sa compute()
*/ */
template <typename Rhs> template <typename Rhs>
inline const Solve<Derived, Rhs> solve(const MatrixBase<Rhs>& b) const { inline Solve<Derived, Rhs> solve(const MatrixBase<Rhs>& b) const {
eigen_assert(m_isInitialized && "Solver is not initialized."); eigen_assert(m_isInitialized && "Solver is not initialized.");
eigen_assert(derived().rows() == b.rows() && "solve(): invalid number of rows of the right hand side matrix b"); eigen_assert(derived().rows() == b.rows() && "solve(): invalid number of rows of the right hand side matrix b");
return Solve<Derived, Rhs>(derived(), b.derived()); return Solve<Derived, Rhs>(derived(), b.derived());
@@ -92,7 +92,7 @@ class SparseSolverBase : internal::noncopyable {
* \sa compute() * \sa compute()
*/ */
template <typename Rhs> template <typename Rhs>
inline const Solve<Derived, Rhs> solve(const SparseMatrixBase<Rhs>& b) const { inline Solve<Derived, Rhs> solve(const SparseMatrixBase<Rhs>& b) const {
eigen_assert(m_isInitialized && "Solver is not initialized."); eigen_assert(m_isInitialized && "Solver is not initialized.");
eigen_assert(derived().rows() == b.rows() && "solve(): invalid number of rows of the right hand side matrix b"); eigen_assert(derived().rows() == b.rows() && "solve(): invalid number of rows of the right hand side matrix b");
return Solve<Derived, Rhs>(derived(), b.derived()); return Solve<Derived, Rhs>(derived(), b.derived());

View File

@@ -310,7 +310,7 @@ class SparseLU : public SparseSolverBase<SparseLU<MatrixType_, OrderingType_>>,
* \sa compute() * \sa compute()
*/ */
template <typename Rhs> template <typename Rhs>
inline const Solve<SparseLU, Rhs> solve(const MatrixBase<Rhs>& B) const; inline Solve<SparseLU, Rhs> solve(const MatrixBase<Rhs>& B) const;
#endif // EIGEN_PARSED_BY_DOXYGEN #endif // EIGEN_PARSED_BY_DOXYGEN
/** \brief Reports whether previous computation was successful. /** \brief Reports whether previous computation was successful.

View File

@@ -241,14 +241,14 @@ class SparseQR : public SparseSolverBase<SparseQR<MatrixType_, OrderingType_> >
* \sa compute() * \sa compute()
*/ */
template <typename Rhs> template <typename Rhs>
inline const Solve<SparseQR, Rhs> solve(const MatrixBase<Rhs>& B) const { inline Solve<SparseQR, Rhs> solve(const MatrixBase<Rhs>& B) const {
eigen_assert(m_isInitialized && "The factorization should be called first, use compute()"); eigen_assert(m_isInitialized && "The factorization should be called first, use compute()");
eigen_assert(this->rows() == B.rows() && eigen_assert(this->rows() == B.rows() &&
"SparseQR::solve() : invalid number of rows in the right hand side matrix"); "SparseQR::solve() : invalid number of rows in the right hand side matrix");
return Solve<SparseQR, Rhs>(*this, B.derived()); return Solve<SparseQR, Rhs>(*this, B.derived());
} }
template <typename Rhs> template <typename Rhs>
inline const Solve<SparseQR, Rhs> solve(const SparseMatrixBase<Rhs>& B) const { inline Solve<SparseQR, Rhs> solve(const SparseMatrixBase<Rhs>& B) const {
eigen_assert(m_isInitialized && "The factorization should be called first, use compute()"); eigen_assert(m_isInitialized && "The factorization should be called first, use compute()");
eigen_assert(this->rows() == B.rows() && eigen_assert(this->rows() == B.rows() &&
"SparseQR::solve() : invalid number of rows in the right hand side matrix"); "SparseQR::solve() : invalid number of rows in the right hand side matrix");