10#ifndef EIGEN_TERNARY_FUNCTORS_H
11#define EIGEN_TERNARY_FUNCTORS_H
14#include "../InternalHeaderCheck.h"
22template <
typename ThenScalar,
typename ElseScalar,
typename ConditionScalar>
23struct scalar_boolean_select_op {
24 static constexpr bool ThenElseAreSame = is_same<ThenScalar, ElseScalar>::value;
25 EIGEN_STATIC_ASSERT(ThenElseAreSame, THEN AND ELSE MUST BE SAME TYPE)
26 using Scalar = ThenScalar;
27 using result_type = Scalar;
28 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Scalar operator()(
const ThenScalar& a,
const ElseScalar& b,
29 const ConditionScalar& cond)
const {
30 return cond == ConditionScalar(0) ? b : a;
32 template <
typename Packet>
33 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet packetOp(
const Packet& a,
const Packet& b,
const Packet& cond)
const {
34 return pselect(pcmp_eq(cond, pzero(cond)), b, a);
38template <
typename ThenScalar,
typename ElseScalar,
typename ConditionScalar>
39struct functor_traits<scalar_boolean_select_op<ThenScalar, ElseScalar, ConditionScalar>> {
40 using Scalar = ThenScalar;
43 PacketAccess = is_same<ThenScalar, ElseScalar>::value && is_same<ConditionScalar, Scalar>::value &&
44 packet_traits<Scalar>::HasCmp
Namespace containing all symbols from the Eigen library.
Definition B01_Experimental.dox:1