10 #ifndef EIGEN_SPARSE_CWISE_UNARY_OP_H 11 #define EIGEN_SPARSE_CWISE_UNARY_OP_H 17 template<
typename UnaryOp,
typename ArgType>
18 struct unary_evaluator<CwiseUnaryOp<UnaryOp,ArgType>, IteratorBased>
19 :
public evaluator_base<CwiseUnaryOp<UnaryOp,ArgType> >
22 typedef CwiseUnaryOp<UnaryOp, ArgType> XprType;
25 class ReverseInnerIterator;
28 CoeffReadCost = evaluator<ArgType>::CoeffReadCost + functor_traits<UnaryOp>::Cost,
29 Flags = XprType::Flags
32 explicit unary_evaluator(
const XprType& op) : m_functor(op.functor()), m_argImpl(op.nestedExpression())
34 EIGEN_INTERNAL_CHECK_COST_VALUE(functor_traits<UnaryOp>::Cost);
35 EIGEN_INTERNAL_CHECK_COST_VALUE(CoeffReadCost);
38 inline Index nonZerosEstimate()
const {
39 return m_argImpl.nonZerosEstimate();
43 typedef typename evaluator<ArgType>::InnerIterator EvalIterator;
46 const UnaryOp m_functor;
47 evaluator<ArgType> m_argImpl;
50 template<
typename UnaryOp,
typename ArgType>
51 class unary_evaluator<CwiseUnaryOp<UnaryOp,ArgType>, IteratorBased>::InnerIterator
52 :
public unary_evaluator<CwiseUnaryOp<UnaryOp,ArgType>, IteratorBased>::EvalIterator
54 typedef typename XprType::Scalar Scalar;
55 typedef typename unary_evaluator<CwiseUnaryOp<UnaryOp,ArgType>, IteratorBased>::EvalIterator Base;
58 EIGEN_STRONG_INLINE InnerIterator(
const unary_evaluator& unaryOp,
Index outer)
59 : Base(unaryOp.m_argImpl,outer), m_functor(unaryOp.m_functor)
62 EIGEN_STRONG_INLINE InnerIterator& operator++()
63 { Base::operator++();
return *
this; }
65 EIGEN_STRONG_INLINE Scalar value()
const {
return m_functor(Base::value()); }
68 const UnaryOp m_functor;
100 template<
typename ViewOp,
typename ArgType>
101 struct unary_evaluator<CwiseUnaryView<ViewOp,ArgType>, IteratorBased>
102 :
public evaluator_base<CwiseUnaryView<ViewOp,ArgType> >
105 typedef CwiseUnaryView<ViewOp, ArgType> XprType;
108 class ReverseInnerIterator;
111 CoeffReadCost = evaluator<ArgType>::CoeffReadCost + functor_traits<ViewOp>::Cost,
112 Flags = XprType::Flags
115 explicit unary_evaluator(
const XprType& op) : m_functor(op.functor()), m_argImpl(op.nestedExpression())
117 EIGEN_INTERNAL_CHECK_COST_VALUE(functor_traits<ViewOp>::Cost);
118 EIGEN_INTERNAL_CHECK_COST_VALUE(CoeffReadCost);
122 typedef typename evaluator<ArgType>::InnerIterator EvalIterator;
125 const ViewOp m_functor;
126 evaluator<ArgType> m_argImpl;
129 template<
typename ViewOp,
typename ArgType>
130 class unary_evaluator<CwiseUnaryView<ViewOp,ArgType>, IteratorBased>::InnerIterator
131 :
public unary_evaluator<CwiseUnaryView<ViewOp,ArgType>, IteratorBased>::EvalIterator
133 typedef typename XprType::Scalar Scalar;
134 typedef typename unary_evaluator<CwiseUnaryView<ViewOp,ArgType>, IteratorBased>::EvalIterator Base;
137 EIGEN_STRONG_INLINE InnerIterator(
const unary_evaluator& unaryOp,
Index outer)
138 : Base(unaryOp.m_argImpl,outer), m_functor(unaryOp.m_functor)
141 EIGEN_STRONG_INLINE InnerIterator& operator++()
142 { Base::operator++();
return *
this; }
144 EIGEN_STRONG_INLINE Scalar value()
const {
return m_functor(Base::value()); }
145 EIGEN_STRONG_INLINE Scalar& valueRef() {
return m_functor(Base::valueRef()); }
148 const ViewOp m_functor;
176 template<
typename Derived>
177 EIGEN_STRONG_INLINE Derived&
178 SparseMatrixBase<Derived>::operator*=(
const Scalar& other)
180 for (
Index j=0; j<outerSize(); ++j)
181 for (
typename Derived::InnerIterator i(derived(),j); i; ++i)
182 i.valueRef() *= other;
186 template<
typename Derived>
187 EIGEN_STRONG_INLINE Derived&
188 SparseMatrixBase<Derived>::operator/=(
const Scalar& other)
190 for (
Index j=0; j<outerSize(); ++j)
191 for (
typename Derived::InnerIterator i(derived(),j); i; ++i)
192 i.valueRef() /= other;
198 #endif // EIGEN_SPARSE_CWISE_UNARY_OP_H Namespace containing all symbols from the Eigen library.
Definition: Core:271
EIGEN_DEFAULT_DENSE_INDEX_TYPE Index
The Index type as used for the API.
Definition: XprHelper.h:35
Definition: Eigen_Colamd.h:50