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 =
25 is_same<std::remove_const_t<ThenScalar>, std::remove_const_t<ElseScalar>>::value;
26 EIGEN_STATIC_ASSERT(ThenElseAreSame, THEN AND ELSE MUST BE SAME TYPE)
27 using Scalar = ThenScalar;
28 using result_type = Scalar;
29 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Scalar operator()(
const ThenScalar& a,
const ElseScalar& b,
30 const ConditionScalar& cond)
const {
31 return cond == ConditionScalar(0) ? b : a;
33 template <
typename Packet>
34 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet packetOp(
const Packet& a,
const Packet& b,
const Packet& cond)
const {
35 return pselect(pcmp_eq(cond, pzero(cond)), b, a);
39template <
typename ThenScalar,
typename ElseScalar,
typename ConditionScalar>
40struct functor_traits<scalar_boolean_select_op<ThenScalar, ElseScalar, ConditionScalar>> {
41 using Scalar = ThenScalar;
44 PacketAccess = is_same<ThenScalar, ElseScalar>::value && is_same<ConditionScalar, Scalar>::value &&
45 packet_traits<Scalar>::HasCmp
Namespace containing all symbols from the Eigen library.
Definition B01_Experimental.dox:1