10 #ifndef EIGEN_VISITOR_H 11 #define EIGEN_VISITOR_H 17 template<
typename Visitor,
typename Derived,
int UnrollCount>
21 col = (UnrollCount-1) / Derived::RowsAtCompileTime,
22 row = (UnrollCount-1) % Derived::RowsAtCompileTime
25 static inline void run(
const Derived &mat, Visitor& visitor)
32 template<
typename Visitor,
typename Derived>
35 static inline void run(
const Derived &mat, Visitor& visitor)
37 return visitor.init(mat.coeff(0, 0), 0, 0);
41 template<
typename Visitor,
typename Derived>
44 typedef typename Derived::Index
Index;
45 static inline void run(
const Derived& mat, Visitor& visitor)
47 visitor.init(mat.coeff(0,0), 0, 0);
48 for(Index i = 1; i < mat.rows(); ++i)
49 visitor(mat.coeff(i, 0), i, 0);
50 for(Index j = 1; j < mat.cols(); ++j)
51 for(Index i = 0; i < mat.rows(); ++i)
52 visitor(mat.coeff(i, j), i, j);
75 template<
typename Derived>
76 template<
typename Visitor>
79 enum { unroll = SizeAtCompileTime !=
Dynamic 85 unroll ? int(SizeAtCompileTime) :
Dynamic 86 >
::run(derived(), visitor);
94 template <
typename Derived>
97 typedef typename Derived::Index
Index;
98 typedef typename Derived::Scalar
Scalar;
101 inline void init(
const Scalar& value, Index i, Index j)
114 template <
typename Derived>
117 typedef typename Derived::Index
Index;
119 void operator() (
const Scalar& value, Index i, Index j)
121 if(value < this->res)
130 template<
typename Scalar>
142 template <
typename Derived>
145 typedef typename Derived::Index
Index;
147 void operator() (
const Scalar& value, Index i, Index j)
149 if(value > this->res)
158 template<
typename Scalar>
172 template<
typename Derived>
173 template<
typename IndexType>
178 this->visit(minVisitor);
179 *rowId = minVisitor.
row;
180 if (colId) *colId = minVisitor.
col;
181 return minVisitor.
res;
189 template<
typename Derived>
190 template<
typename IndexType>
196 this->visit(minVisitor);
197 *index = (RowsAtCompileTime==1) ? minVisitor.
col : minVisitor.
row;
198 return minVisitor.
res;
206 template<
typename Derived>
207 template<
typename IndexType>
212 this->visit(maxVisitor);
213 *rowPtr = maxVisitor.
row;
214 if (colPtr) *colPtr = maxVisitor.
col;
215 return maxVisitor.
res;
223 template<
typename Derived>
224 template<
typename IndexType>
230 this->visit(maxVisitor);
231 *index = (RowsAtCompileTime==1) ? maxVisitor.
col : maxVisitor.
row;
232 return maxVisitor.
res;
237 #endif // EIGEN_VISITOR_H internal::traits< Derived >::Scalar maxCoeff() const
iterative scaling algorithm to equilibrate rows and column norms in matrices
Holds information about the various numeric (i.e. scalar) types allowed by Eigen. ...
static void run(const Derived &mat, Visitor &visitor)
void visit(Visitor &func) const
static void run(const Derived &mat, Visitor &visitor)
internal::traits< Derived >::Scalar minCoeff() const
static void run(const Derived &mat, Visitor &visitor)
#define EIGEN_STATIC_ASSERT_VECTOR_ONLY(TYPE)
void init(const Scalar &value, Index i, Index j)
#define EIGEN_UNROLLING_LIMIT