diff options
author | Benoit Steiner <benoit.steiner.goog@gmail.com> | 2015-03-24 13:12:14 -0700 |
---|---|---|
committer | Benoit Steiner <benoit.steiner.goog@gmail.com> | 2015-03-24 13:12:14 -0700 |
commit | d3f7915aeb5fb08da7961cfb0160561ec0cf56bb (patch) | |
tree | adf1d716f3ebd09540728776b719bfe8cdb1a022 /Eigen/src/Core/functors/UnaryFunctors.h | |
parent | 0196141938e5f988308eab82450cf283dacdf844 (diff) | |
parent | abdbe8562e889a0ca0877d607cfd5c4cbf937e3a (diff) |
Pulled latest update from the eigen main codebase
Diffstat (limited to 'Eigen/src/Core/functors/UnaryFunctors.h')
-rw-r--r-- | Eigen/src/Core/functors/UnaryFunctors.h | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/Eigen/src/Core/functors/UnaryFunctors.h b/Eigen/src/Core/functors/UnaryFunctors.h index a3b5f50b1..4e03761ea 100644 --- a/Eigen/src/Core/functors/UnaryFunctors.h +++ b/Eigen/src/Core/functors/UnaryFunctors.h @@ -56,6 +56,34 @@ struct functor_traits<scalar_abs_op<Scalar> > }; /** \internal + * \brief Template functor to compute the score of a scalar, to chose a pivot + * + * \sa class CwiseUnaryOp + */ +template<typename Scalar> struct scalar_score_coeff_op : scalar_abs_op<Scalar> +{ + typedef void Score_is_abs; +}; +template<typename Scalar> +struct functor_traits<scalar_score_coeff_op<Scalar> > : functor_traits<scalar_abs_op<Scalar> > {}; + +/* Avoid recomputing abs when we know the score and they are the same. Not a true Eigen functor. */ +template<typename Scalar, typename=void> struct abs_knowing_score +{ + EIGEN_EMPTY_STRUCT_CTOR(abs_knowing_score) + typedef typename NumTraits<Scalar>::Real result_type; + template<typename Score> + EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const result_type operator() (const Scalar& a, const Score&) const { using std::abs; return abs(a); } +}; +template<typename Scalar> struct abs_knowing_score<Scalar, typename scalar_score_coeff_op<Scalar>::Score_is_abs> +{ + EIGEN_EMPTY_STRUCT_CTOR(abs_knowing_score) + typedef typename NumTraits<Scalar>::Real result_type; + template<typename Scal> + EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const result_type operator() (const Scal&, const result_type& a) const { return a; } +}; + +/** \internal * \brief Template functor to compute the squared absolute value of a scalar * * \sa class CwiseUnaryOp, Cwise::abs2 |