mirror of
https://gitlab.com/libeigen/eigen.git
synced 2026-04-10 11:34:33 +08:00
Make new Select implementation backwards compatible.
This commit is contained in:
@@ -18,24 +18,23 @@ namespace internal {
|
||||
|
||||
//---------- associative ternary functors ----------
|
||||
|
||||
template <typename ConditionScalar, typename ThenScalar, typename ElseScalar>
|
||||
template <typename ThenScalar, typename ElseScalar, typename ConditionScalar>
|
||||
struct scalar_boolean_select_op {
|
||||
static constexpr bool ThenElseAreSame = is_same<ThenScalar, ElseScalar>::value;
|
||||
EIGEN_STATIC_ASSERT(ThenElseAreSame, THEN AND ELSE MUST BE SAME TYPE)
|
||||
using Scalar = ThenScalar;
|
||||
using result_type = Scalar;
|
||||
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Scalar operator()(const ConditionScalar& cond, const ThenScalar& a,
|
||||
const ElseScalar& b) const {
|
||||
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Scalar operator()(const ThenScalar& a, const ElseScalar& b, const ConditionScalar& cond) const {
|
||||
return cond == ConditionScalar(0) ? b : a;
|
||||
}
|
||||
template <typename Packet>
|
||||
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet packetOp(const Packet& cond, const Packet& a, const Packet& b) const {
|
||||
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet packetOp(const Packet& a, const Packet& b, const Packet& cond) const {
|
||||
return pselect(pcmp_eq(cond, pzero(cond)), b, a);
|
||||
}
|
||||
};
|
||||
|
||||
template <typename ConditionScalar, typename ThenScalar, typename ElseScalar>
|
||||
struct functor_traits<scalar_boolean_select_op<ConditionScalar, ThenScalar, ElseScalar>> {
|
||||
template <typename ThenScalar, typename ElseScalar, typename ConditionScalar>
|
||||
struct functor_traits<scalar_boolean_select_op<ThenScalar, ElseScalar, ConditionScalar>> {
|
||||
using Scalar = ThenScalar;
|
||||
enum {
|
||||
Cost = 1,
|
||||
|
||||
Reference in New Issue
Block a user