10#ifndef EIGEN_CWISE_NULLARY_OP_H
11#define EIGEN_CWISE_NULLARY_OP_H
16template<
typename NullaryOp,
typename PlainObjectType>
17struct traits<CwiseNullaryOp<NullaryOp, PlainObjectType> > : traits<PlainObjectType>
20 Flags = traits<PlainObjectType>::Flags &
RowMajorBit
59template<
typename NullaryOp,
typename PlainObjectType>
60class CwiseNullaryOp :
public internal::dense_xpr_base< CwiseNullaryOp<NullaryOp, PlainObjectType> >::type, internal::no_assignment_operator
64 typedef typename internal::dense_xpr_base<CwiseNullaryOp>::type Base;
69 : m_rows(rows), m_cols(cols), m_functor(func)
71 eigen_assert(rows >= 0
72 && (RowsAtCompileTime ==
Dynamic || RowsAtCompileTime == rows)
74 && (ColsAtCompileTime ==
Dynamic || ColsAtCompileTime == cols));
77 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE EIGEN_CONSTEXPR
78 Index rows()
const {
return m_rows.value(); }
79 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE EIGEN_CONSTEXPR
80 Index cols()
const {
return m_cols.value(); }
84 const NullaryOp&
functor()
const {
return m_functor; }
87 const internal::variable_if_dynamic<Index, RowsAtCompileTime> m_rows;
88 const internal::variable_if_dynamic<Index, ColsAtCompileTime> m_cols;
89 const NullaryOp m_functor;
106template<
typename Derived>
107template<
typename CustomNullaryOp>
108EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
109#ifndef EIGEN_PARSED_BY_DOXYGEN
110const CwiseNullaryOp<CustomNullaryOp,typename DenseBase<Derived>::PlainObject>
112const CwiseNullaryOp<CustomNullaryOp,PlainObject>
137template<
typename Derived>
138template<
typename CustomNullaryOp>
139EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
140#ifndef EIGEN_PARSED_BY_DOXYGEN
147 EIGEN_STATIC_ASSERT_VECTOR_ONLY(Derived)
161template<
typename Derived>
162template<
typename CustomNullaryOp>
163EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
164#ifndef EIGEN_PARSED_BY_DOXYGEN
187template<
typename Derived>
209template<
typename Derived>
225template<
typename Derived>
229 EIGEN_STATIC_ASSERT_FIXED_SIZE(Derived)
242template<
typename Derived>
246 EIGEN_STATIC_ASSERT_VECTOR_ONLY(Derived)
254template<
typename Derived>
258 EIGEN_STATIC_ASSERT_VECTOR_ONLY(Derived)
259 EIGEN_STATIC_ASSERT_FIXED_SIZE(Derived)
260 return
DenseBase<Derived>::NullaryExpr(Derived::SizeAtCompileTime, internal::linspaced_op<
Scalar>(low,high,Derived::SizeAtCompileTime));
286template<typename Derived>
287EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const typename
DenseBase<Derived>::RandomAccessLinSpacedReturnType
290 EIGEN_STATIC_ASSERT_VECTOR_ONLY(Derived)
298template<
typename Derived>
302 EIGEN_STATIC_ASSERT_VECTOR_ONLY(Derived)
303 EIGEN_STATIC_ASSERT_FIXED_SIZE(Derived)
308template<
typename Derived>
310(
const Scalar& val,
const RealScalar& prec)
const
312 typename internal::nested_eval<Derived,1>::type self(derived());
313 for(
Index j = 0; j < cols(); ++j)
314 for(
Index i = 0; i < rows(); ++i)
315 if(!internal::isApprox(self.coeff(i, j), val, prec))
323template<
typename Derived>
325(
const Scalar& val,
const RealScalar& prec)
const
327 return isApproxToConstant(val, prec);
334template<
typename Derived>
344template<
typename Derived>
347 return derived() = Constant(rows(), cols(), val);
359template<
typename Derived>
360EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Derived&
364 return setConstant(val);
378template<
typename Derived>
379EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Derived&
383 return setConstant(val);
392template<
typename Derived>
393EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Derived&
396 return setConstant(rows(), cols, val);
405template<
typename Derived>
406EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Derived&
409 return setConstant(rows, cols(), val);
429template<
typename Derived>
432 EIGEN_STATIC_ASSERT_VECTOR_ONLY(Derived)
433 return derived() = Derived::NullaryExpr(newSize, internal::linspaced_op<Scalar>(low,high,newSize));
449template<
typename Derived>
452 EIGEN_STATIC_ASSERT_VECTOR_ONLY(Derived)
453 return setLinSpaced(size(), low, high);
472template<
typename Derived>
476 return Constant(rows, cols,
Scalar(0));
495template<
typename Derived>
499 return Constant(size,
Scalar(0));
512template<
typename Derived>
516 return Constant(
Scalar(0));
527template<
typename Derived>
530 typename internal::nested_eval<Derived,1>::type self(derived());
531 for(
Index j = 0; j < cols(); ++j)
532 for(
Index i = 0; i < rows(); ++i)
533 if(!internal::isMuchSmallerThan(self.coeff(i, j),
static_cast<Scalar>(1), prec))
545template<
typename Derived>
548 return setConstant(
Scalar(0));
560template<
typename Derived>
561EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Derived&
565 return setConstant(Scalar(0));
578template<
typename Derived>
579EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Derived&
583 return setConstant(Scalar(0));
592template<
typename Derived>
593EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Derived&
596 return setZero(rows(), cols);
605template<
typename Derived>
606EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Derived&
609 return setZero(rows, cols());
628template<
typename Derived>
632 return Constant(rows, cols,
Scalar(1));
651template<
typename Derived>
655 return Constant(newSize,
Scalar(1));
668template<
typename Derived>
672 return Constant(
Scalar(1));
683template<
typename Derived>
685(
const RealScalar& prec)
const
687 return isApproxToConstant(
Scalar(1), prec);
697template<
typename Derived>
700 return setConstant(
Scalar(1));
712template<
typename Derived>
713EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Derived&
717 return setConstant(Scalar(1));
730template<
typename Derived>
731EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Derived&
735 return setConstant(Scalar(1));
744template<
typename Derived>
745EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Derived&
748 return setOnes(rows, cols());
757template<
typename Derived>
758EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Derived&
761 return setOnes(rows(), cols);
780template<
typename Derived>
797template<
typename Derived>
801 EIGEN_STATIC_ASSERT_FIXED_SIZE(Derived)
814template<
typename Derived>
816(
const RealScalar& prec)
const
818 typename internal::nested_eval<Derived,1>::type self(derived());
819 for(
Index j = 0; j < cols(); ++j)
821 for(
Index i = 0; i < rows(); ++i)
825 if(!internal::isApprox(self.coeff(i, j),
static_cast<Scalar>(1), prec))
830 if(!internal::isMuchSmallerThan(self.coeff(i, j),
static_cast<RealScalar
>(1), prec))
840template<
typename Derived,
bool Big = (Derived::SizeAtCompileTime>=16)>
841struct setIdentity_impl
844 static EIGEN_STRONG_INLINE Derived& run(Derived& m)
846 return m = Derived::Identity(m.rows(), m.cols());
850template<
typename Derived>
851struct setIdentity_impl<Derived, true>
854 static EIGEN_STRONG_INLINE Derived& run(Derived& m)
857 const Index size = numext::mini(m.rows(), m.cols());
858 for(
Index i = 0; i < size; ++i) m.coeffRef(i,i) =
typename Derived::Scalar(1);
872template<
typename Derived>
875 return internal::setIdentity_impl<Derived>::run(derived());
888template<
typename Derived>
891 derived().
resize(rows, cols);
892 return setIdentity();
901template<
typename Derived>
904 EIGEN_STATIC_ASSERT_VECTOR_ONLY(Derived)
905 return BasisReturnType(SquareMatrixType::Identity(newSize,newSize), i);
916template<
typename Derived>
919 EIGEN_STATIC_ASSERT_VECTOR_ONLY(Derived)
920 return BasisReturnType(SquareMatrixType::Identity(),i);
929template<
typename Derived>
931{
return Derived::Unit(0); }
939template<
typename Derived>
941{
return Derived::Unit(1); }
949template<
typename Derived>
951{
return Derived::Unit(2); }
959template<
typename Derived>
961{
return Derived::Unit(3); }
971template<
typename Derived>
974 EIGEN_STATIC_ASSERT_VECTOR_ONLY(Derived);
975 eigen_assert(i<size());
977 derived().coeffRef(i) =
Scalar(1);
990template<
typename Derived>
993 EIGEN_STATIC_ASSERT_VECTOR_ONLY(Derived);
994 eigen_assert(i<newSize);
995 derived().resize(newSize);
Generic expression of a matrix where all coefficients are defined by a functor.
Definition: CwiseNullaryOp.h:61
const NullaryOp & functor() const
Definition: CwiseNullaryOp.h:84
Base class for all dense matrices, vectors, and arrays.
Definition: DenseBase.h:47
void resize(Index newSize)
Definition: DenseBase.h:246
internal::traits< Derived >::Scalar Scalar
Definition: DenseBase.h:66
Base class for all dense matrices, vectors, and expressions.
Definition: MatrixBase.h:50
Dense storage base class for matrices and arrays.
Definition: PlainObjectBase.h:100
const unsigned int RowMajorBit
Definition: Constants.h:66
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
const int Dynamic
Definition: Constants.h:22