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
iterative scaling algorithm to equilibrate rows and column norms in matrices
void visit(Visitor &func) const
Holds information about the various numeric (i.e. scalar) types allowed by Eigen. ...
static void run(const Derived &mat, Visitor &visitor)
internal::traits< Derived >::Scalar maxCoeff() 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