25 #ifndef EIGEN_CWISE_NULLARY_OP_H
26 #define EIGEN_CWISE_NULLARY_OP_H
49 template<
typename NullaryOp,
typename PlainObjectType>
50 struct traits<CwiseNullaryOp<NullaryOp, PlainObjectType> > :
traits<PlainObjectType>
58 CoeffReadCost = functor_traits<NullaryOp>::Cost
63 template<
typename NullaryOp,
typename PlainObjectType>
65 public internal::dense_xpr_base< CwiseNullaryOp<NullaryOp, PlainObjectType> >::type
69 typedef typename internal::dense_xpr_base<CwiseNullaryOp>::type
Base;
73 : m_rows(rows), m_cols(cols), m_functor(func)
76 && (RowsAtCompileTime ==
Dynamic || RowsAtCompileTime == rows)
78 && (ColsAtCompileTime ==
Dynamic || ColsAtCompileTime == cols));
86 return m_functor(rows, cols);
89 template<
int LoadMode>
92 return m_functor.packetOp(row, col);
97 return m_functor(index);
100 template<
int LoadMode>
103 return m_functor.packetOp(index);
107 const NullaryOp&
functor()
const {
return m_functor; }
110 const internal::variable_if_dynamic<Index, RowsAtCompileTime>
m_rows;
111 const internal::variable_if_dynamic<Index, ColsAtCompileTime>
m_cols;
129 template<
typename Derived>
130 template<
typename CustomNullaryOp>
152 template<
typename Derived>
153 template<
typename CustomNullaryOp>
171 template<
typename Derived>
172 template<
typename CustomNullaryOp>
192 template<
typename Derived>
214 template<
typename Derived>
230 template<
typename Derived>
255 template<
typename Derived>
267 template<
typename Derived>
289 template<
typename Derived>
301 template<
typename Derived>
311 template<
typename Derived>
315 for(
Index j = 0; j < cols(); ++j)
316 for(
Index i = 0; i < rows(); ++i)
325 template<
typename Derived>
329 return isApproxToConstant(value, prec);
336 template<
typename Derived>
346 template<
typename Derived>
349 return derived() = Constant(rows(), cols(), value);
361 template<
typename Derived>
366 return setConstant(value);
380 template<
typename Derived>
385 return setConstant(value);
401 template<
typename Derived>
405 return derived() = Derived::NullaryExpr(size, internal::linspaced_op<Scalar,false>(low,high,size));
418 template<
typename Derived>
422 return setLinSpaced(size(), low, high);
441 template<
typename Derived>
445 return Constant(rows, cols,
Scalar(0));
464 template<
typename Derived>
468 return Constant(size,
Scalar(0));
481 template<
typename Derived>
485 return Constant(
Scalar(0));
496 template<
typename Derived>
499 for(
Index j = 0; j < cols(); ++j)
500 for(
Index i = 0; i < rows(); ++i)
513 template<
typename Derived>
516 return setConstant(
Scalar(0));
528 template<
typename Derived>
533 return setConstant(
Scalar(0));
546 template<
typename Derived>
551 return setConstant(
Scalar(0));
570 template<
typename Derived>
574 return Constant(rows, cols,
Scalar(1));
593 template<
typename Derived>
597 return Constant(size,
Scalar(1));
610 template<
typename Derived>
614 return Constant(
Scalar(1));
625 template<
typename Derived>
629 return isApproxToConstant(
Scalar(1), prec);
639 template<
typename Derived>
642 return setConstant(
Scalar(1));
654 template<
typename Derived>
659 return setConstant(
Scalar(1));
672 template<
typename Derived>
677 return setConstant(
Scalar(1));
696 template<
typename Derived>
713 template<
typename Derived>
730 template<
typename Derived>
734 for(
Index j = 0; j < cols(); ++j)
736 for(
Index i = 0; i < rows(); ++i)
755 template<
typename Derived,
bool Big = (Derived::SizeAtCompileTime>=16)>
756 struct setIdentity_impl
760 return m = Derived::Identity(m.rows(), m.cols());
764 template<
typename Derived>
765 struct setIdentity_impl<Derived, true>
767 typedef typename Derived::Index Index;
771 const Index size = (std::min)(m.rows(), m.cols());
772 for(Index i = 0; i < size; ++i) m.coeffRef(i,i) =
typename Derived::Scalar(1);
786 template<
typename Derived>
789 return internal::setIdentity_impl<Derived>::run(derived());
802 template<
typename Derived>
805 derived().
resize(rows, cols);
806 return setIdentity();
815 template<
typename Derived>
819 return BasisReturnType(SquareMatrixType::Identity(size,size), i);
830 template<
typename Derived>
834 return BasisReturnType(SquareMatrixType::Identity(),i);
843 template<
typename Derived>
845 {
return Derived::Unit(0); }
853 template<
typename Derived>
855 {
return Derived::Unit(1); }
863 template<
typename Derived>
865 {
return Derived::Unit(2); }
873 template<
typename Derived>
875 {
return Derived::Unit(3); }
879 #endif // EIGEN_CWISE_NULLARY_OP_H