$darkmode
Eigen  5.0.1-dev
Select.h
1 // This file is part of Eigen, a lightweight C++ template library
2 // for linear algebra.
3 //
4 // Copyright (C) 2008-2010 Gael Guennebaud <gael.guennebaud@inria.fr>
5 //
6 // This Source Code Form is subject to the terms of the Mozilla
7 // Public License v. 2.0. If a copy of the MPL was not distributed
8 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
9 
10 #ifndef EIGEN_SELECT_H
11 #define EIGEN_SELECT_H
12 
13 // IWYU pragma: private
14 #include "./InternalHeaderCheck.h"
15 
16 namespace Eigen {
17 
32 template <typename ConditionMatrixType, typename ThenMatrixType, typename ElseMatrixType>
33 using Select = CwiseTernaryOp<internal::scalar_boolean_select_op<typename DenseBase<ThenMatrixType>::Scalar,
36  ThenMatrixType, ElseMatrixType, ConditionMatrixType>;
37 
46 template <typename Derived>
47 template <typename ThenDerived, typename ElseDerived>
48 inline EIGEN_DEVICE_FUNC CwiseTernaryOp<
49  internal::scalar_boolean_select_op<typename DenseBase<ThenDerived>::Scalar, typename DenseBase<ElseDerived>::Scalar,
51  ThenDerived, ElseDerived, Derived>
52 DenseBase<Derived>::select(const DenseBase<ThenDerived>& thenMatrix, const DenseBase<ElseDerived>& elseMatrix) const {
53  return Select<Derived, ThenDerived, ElseDerived>(thenMatrix.derived(), elseMatrix.derived(), derived());
54 }
60 template <typename Derived>
61 template <typename ThenDerived>
62 inline EIGEN_DEVICE_FUNC CwiseTernaryOp<
63  internal::scalar_boolean_select_op<typename DenseBase<ThenDerived>::Scalar, typename DenseBase<ThenDerived>::Scalar,
65  ThenDerived, typename DenseBase<ThenDerived>::ConstantReturnType, Derived>
67  const typename DenseBase<ThenDerived>::Scalar& elseScalar) const {
68  using ElseConstantType = typename DenseBase<ThenDerived>::ConstantReturnType;
70  ElseConstantType(rows(), cols(), elseScalar), derived());
71 }
77 template <typename Derived>
78 template <typename ElseDerived>
79 inline EIGEN_DEVICE_FUNC CwiseTernaryOp<
80  internal::scalar_boolean_select_op<typename DenseBase<ElseDerived>::Scalar, typename DenseBase<ElseDerived>::Scalar,
82  typename DenseBase<ElseDerived>::ConstantReturnType, ElseDerived, Derived>
84  const DenseBase<ElseDerived>& elseMatrix) const {
85  using ThenConstantType = typename DenseBase<ElseDerived>::ConstantReturnType;
86  return Select<Derived, ThenConstantType, ElseDerived>(ThenConstantType(rows(), cols(), thenScalar),
87  elseMatrix.derived(), derived());
88 }
89 
90 } // end namespace Eigen
91 
92 #endif // EIGEN_SELECT_H
constexpr Derived & derived()
Definition: EigenBase.h:49
internal::traits< Derived >::Scalar Scalar
Definition: DenseBase.h:62
Namespace containing all symbols from the Eigen library.
Definition: B01_Experimental.dox:1
Base class for all dense matrices, vectors, and arrays.
Definition: DenseBase.h:38
Generic expression where a coefficient-wise ternary operator is applied to two expressions.
Definition: CwiseTernaryOp.h:84
CwiseTernaryOp< internal::scalar_boolean_select_op< typename DenseBase< ThenMatrixType >::Scalar, typename DenseBase< ElseMatrixType >::Scalar, typename DenseBase< ConditionMatrixType >::Scalar >, ThenMatrixType, ElseMatrixType, ConditionMatrixType > Select
Expression of a coefficient wise version of the C++ ternary operator ?:
Definition: Select.h:36