10 #ifndef EIGEN_CWISE_NULLARY_OP_H
11 #define EIGEN_CWISE_NULLARY_OP_H
16 template<
typename NullaryOp,
typename PlainObjectType>
59 template<
typename NullaryOp,
typename PlainObjectType>
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));
78 EIGEN_STRONG_INLINE
Index rows()
const {
return m_rows.value(); }
80 EIGEN_STRONG_INLINE
Index cols()
const {
return m_cols.value(); }
84 const NullaryOp&
functor()
const {
return m_functor; }
89 const NullaryOp m_functor;
106 template<
typename Derived>
107 template<
typename CustomNullaryOp>
108 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
109 #ifndef EIGEN_PARSED_BY_DOXYGEN
110 const CwiseNullaryOp<CustomNullaryOp,typename DenseBase<Derived>::PlainObject>
112 const CwiseNullaryOp<CustomNullaryOp,PlainObject>
137 template<
typename Derived>
138 template<
typename CustomNullaryOp>
139 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
140 #ifndef EIGEN_PARSED_BY_DOXYGEN
147 EIGEN_STATIC_ASSERT_VECTOR_ONLY(Derived)
161 template<
typename Derived>
162 template<
typename CustomNullaryOp>
163 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
164 #ifndef EIGEN_PARSED_BY_DOXYGEN
187 template<
typename Derived>
209 template<
typename Derived>
225 template<
typename Derived>
229 EIGEN_STATIC_ASSERT_FIXED_SIZE(Derived)
242 template<
typename Derived>
246 EIGEN_STATIC_ASSERT_VECTOR_ONLY(Derived)
254 template<
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));
286 template<typename Derived>
290 EIGEN_STATIC_ASSERT_VECTOR_ONLY(Derived)
298 template<
typename Derived>
302 EIGEN_STATIC_ASSERT_VECTOR_ONLY(Derived)
303 EIGEN_STATIC_ASSERT_FIXED_SIZE(Derived)
308 template<
typename Derived>
310 (
const Scalar& val,
const RealScalar& prec)
const
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))
323 template<
typename Derived>
325 (
const Scalar& val,
const RealScalar& prec)
const
327 return isApproxToConstant(val, prec);
334 template<
typename Derived>
344 template<
typename Derived>
347 return derived() = Constant(rows(), cols(), val);
359 template<
typename Derived>
360 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Derived&
364 return setConstant(val);
378 template<
typename Derived>
379 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Derived&
383 return setConstant(val);
402 template<
typename Derived>
405 EIGEN_STATIC_ASSERT_VECTOR_ONLY(Derived)
422 template<
typename Derived>
425 EIGEN_STATIC_ASSERT_VECTOR_ONLY(Derived)
426 return setLinSpaced(size(), low, high);
445 template<
typename Derived>
449 return Constant(rows, cols,
Scalar(0));
468 template<
typename Derived>
472 return Constant(size,
Scalar(0));
485 template<
typename Derived>
489 return Constant(
Scalar(0));
500 template<
typename Derived>
504 for(
Index j = 0; j < cols(); ++j)
505 for(
Index i = 0; i < rows(); ++i)
506 if(!internal::isMuchSmallerThan(
self.coeff(i, j),
static_cast<Scalar>(1), prec))
518 template<
typename Derived>
521 return setConstant(
Scalar(0));
533 template<
typename Derived>
534 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Derived&
538 return setConstant(Scalar(0));
551 template<
typename Derived>
552 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Derived&
556 return setConstant(Scalar(0));
575 template<
typename Derived>
579 return Constant(rows, cols,
Scalar(1));
598 template<
typename Derived>
602 return Constant(newSize,
Scalar(1));
615 template<
typename Derived>
619 return Constant(
Scalar(1));
630 template<
typename Derived>
632 (
const RealScalar& prec)
const
634 return isApproxToConstant(
Scalar(1), prec);
644 template<
typename Derived>
647 return setConstant(
Scalar(1));
659 template<
typename Derived>
660 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Derived&
664 return setConstant(Scalar(1));
677 template<
typename Derived>
678 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Derived&
682 return setConstant(Scalar(1));
701 template<
typename Derived>
718 template<
typename Derived>
722 EIGEN_STATIC_ASSERT_FIXED_SIZE(Derived)
723 return
MatrixBase<Derived>::NullaryExpr(RowsAtCompileTime, ColsAtCompileTime, internal::scalar_identity_op<Scalar>());
735 template<typename Derived>
737 (const RealScalar& prec)
const
740 for(
Index j = 0; j < cols(); ++j)
742 for(
Index i = 0; i < rows(); ++i)
746 if(!internal::isApprox(
self.coeff(i, j),
static_cast<Scalar>(1), prec))
751 if(!internal::isMuchSmallerThan(
self.coeff(i, j),
static_cast<RealScalar
>(1), prec))
761 template<
typename Derived,
bool Big = (Derived::SizeAtCompileTime>=16)>
765 static EIGEN_STRONG_INLINE Derived& run(Derived& m)
767 return m = Derived::Identity(m.rows(), m.cols());
771 template<
typename Derived>
775 static EIGEN_STRONG_INLINE Derived& run(Derived& m)
778 const Index size = numext::mini(m.rows(), m.cols());
779 for(
Index i = 0; i < size; ++i) m.coeffRef(i,i) =
typename Derived::Scalar(1);
793 template<
typename Derived>
809 template<
typename Derived>
812 derived().resize(rows, cols);
813 return setIdentity();
822 template<
typename Derived>
825 EIGEN_STATIC_ASSERT_VECTOR_ONLY(Derived)
826 return BasisReturnType(SquareMatrixType::Identity(newSize,newSize), i);
837 template<
typename Derived>
840 EIGEN_STATIC_ASSERT_VECTOR_ONLY(Derived)
850 template<
typename Derived>
852 {
return Derived::Unit(0); }
860 template<
typename Derived>
862 {
return Derived::Unit(1); }
870 template<
typename Derived>
872 {
return Derived::Unit(2); }
880 template<
typename Derived>
882 {
return Derived::Unit(3); }
892 template<
typename Derived>
895 EIGEN_STATIC_ASSERT_VECTOR_ONLY(Derived);
896 eigen_assert(i<size());
898 derived().coeffRef(i) =
Scalar(1);
911 template<
typename Derived>
914 EIGEN_STATIC_ASSERT_VECTOR_ONLY(Derived);
915 eigen_assert(i<newSize);
916 derived().resize(newSize);
922 #endif // EIGEN_CWISE_NULLARY_OP_H