31template<
typename ConditionMatrixType,
typename ThenMatrixType,
typename ElseMatrixType>
32struct traits<Select<ConditionMatrixType, ThenMatrixType, ElseMatrixType> >
33 : traits<ThenMatrixType>
35 typedef typename traits<ThenMatrixType>::Scalar Scalar;
36 typedef Dense StorageKind;
37 typedef typename traits<ThenMatrixType>::XprKind XprKind;
38 typedef typename ConditionMatrixType::Nested ConditionMatrixNested;
39 typedef typename ThenMatrixType::Nested ThenMatrixNested;
40 typedef typename ElseMatrixType::Nested ElseMatrixNested;
42 RowsAtCompileTime = ConditionMatrixType::RowsAtCompileTime,
43 ColsAtCompileTime = ConditionMatrixType::ColsAtCompileTime,
44 MaxRowsAtCompileTime = ConditionMatrixType::MaxRowsAtCompileTime,
45 MaxColsAtCompileTime = ConditionMatrixType::MaxColsAtCompileTime,
46 Flags = (
unsigned int)ThenMatrixType::Flags & ElseMatrixType::Flags & RowMajorBit
51template<
typename ConditionMatrixType,
typename ThenMatrixType,
typename ElseMatrixType>
52class Select :
public internal::dense_xpr_base< Select<ConditionMatrixType, ThenMatrixType, ElseMatrixType> >::type,
53 internal::no_assignment_operator
57 typedef typename internal::dense_xpr_base<Select>::type Base;
58 EIGEN_DENSE_PUBLIC_INTERFACE(
Select)
60 inline EIGEN_DEVICE_FUNC
61 Select(
const ConditionMatrixType& a_conditionMatrix,
62 const ThenMatrixType& a_thenMatrix,
63 const ElseMatrixType& a_elseMatrix)
64 : m_condition(a_conditionMatrix), m_then(a_thenMatrix), m_else(a_elseMatrix)
66 eigen_assert(m_condition.rows() == m_then.rows() && m_condition.rows() == m_else.rows());
67 eigen_assert(m_condition.cols() == m_then.cols() && m_condition.cols() == m_else.cols());
70 inline EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR
71 Index rows()
const EIGEN_NOEXCEPT {
return m_condition.rows(); }
72 inline EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR
73 Index cols()
const EIGEN_NOEXCEPT {
return m_condition.cols(); }
75 inline EIGEN_DEVICE_FUNC
78 if (m_condition.coeff(i,j))
79 return m_then.coeff(i,j);
81 return m_else.coeff(i,j);
84 inline EIGEN_DEVICE_FUNC
85 const Scalar coeff(
Index i)
const
87 if (m_condition.coeff(i))
88 return m_then.coeff(i);
90 return m_else.coeff(i);
93 inline EIGEN_DEVICE_FUNC
const ConditionMatrixType& conditionMatrix()
const
98 inline EIGEN_DEVICE_FUNC
const ThenMatrixType& thenMatrix()
const
103 inline EIGEN_DEVICE_FUNC
const ElseMatrixType& elseMatrix()
const
109 typename ConditionMatrixType::Nested m_condition;
110 typename ThenMatrixType::Nested m_then;
111 typename ElseMatrixType::Nested m_else;
123template<
typename Derived>
124template<
typename ThenDerived,
typename ElseDerived>
137template<
typename Derived>
138template<
typename ThenDerived>
141 const typename ThenDerived::Scalar& elseScalar)
const
144 derived(), thenMatrix.
derived(), ThenDerived::Constant(rows(),cols(),elseScalar));
152template<
typename Derived>
153template<
typename ElseDerived>
159 derived(), ElseDerived::Constant(rows(),cols(),thenScalar), elseMatrix.
derived());
Base class for all dense matrices, vectors, and arrays.
Definition: DenseBase.h:47
Derived & derived()
Definition: EigenBase.h:46
Expression of a coefficient wise version of the C++ ternary operator ?:
Definition: Select.h:54
Namespace containing all symbols from the Eigen library.
Definition: Core:141
EIGEN_DEFAULT_DENSE_INDEX_TYPE Index
The Index type as used for the API.
Definition: Meta.h:74