10#ifndef EIGEN_ALLANDANY_H
11#define EIGEN_ALLANDANY_H
17template<
typename Derived,
int UnrollCount,
int InnerSize>
21 IsRowMajor = (int(Derived::Flags) & int(
RowMajor)),
22 i = (UnrollCount-1) / InnerSize,
23 j = (UnrollCount-1) % InnerSize
26 EIGEN_DEVICE_FUNC
static inline bool run(
const Derived &mat)
28 return all_unroller<Derived, UnrollCount-1, InnerSize>::run(mat) && mat.coeff(IsRowMajor ? i : j, IsRowMajor ? j : i);
32template<
typename Derived,
int InnerSize>
33struct all_unroller<Derived, 0, InnerSize>
35 EIGEN_DEVICE_FUNC
static inline bool run(
const Derived &) {
return true; }
38template<
typename Derived,
int InnerSize>
39struct all_unroller<Derived,
Dynamic, InnerSize>
41 EIGEN_DEVICE_FUNC
static inline bool run(
const Derived &) {
return false; }
44template<
typename Derived,
int UnrollCount,
int InnerSize>
48 IsRowMajor = (int(Derived::Flags) & int(
RowMajor)),
49 i = (UnrollCount-1) / InnerSize,
50 j = (UnrollCount-1) % InnerSize
53 EIGEN_DEVICE_FUNC
static inline bool run(
const Derived &mat)
55 return any_unroller<Derived, UnrollCount-1, InnerSize>::run(mat) || mat.coeff(IsRowMajor ? i : j, IsRowMajor ? j : i);
59template<
typename Derived,
int InnerSize>
60struct any_unroller<Derived, 0, InnerSize>
62 EIGEN_DEVICE_FUNC
static inline bool run(
const Derived & ) {
return false; }
65template<
typename Derived,
int InnerSize>
66struct any_unroller<Derived,
Dynamic, InnerSize>
68 EIGEN_DEVICE_FUNC
static inline bool run(
const Derived &) {
return false; }
80template<
typename Derived>
83 typedef internal::evaluator<Derived> Evaluator;
86 &&
SizeAtCompileTime * (int(Evaluator::CoeffReadCost) + int(NumTraits<Scalar>::AddCost)) <= EIGEN_UNROLLING_LIMIT
88 Evaluator evaluator(derived());
90 return internal::all_unroller<Evaluator, unroll ? int(
SizeAtCompileTime) :
Dynamic, InnerSizeAtCompileTime>::run(evaluator);
93 for(
Index i = 0; i < derived().outerSize(); ++i)
94 for(
Index j = 0; j < derived().innerSize(); ++j)
104template<
typename Derived>
107 typedef internal::evaluator<Derived> Evaluator;
110 &&
SizeAtCompileTime * (int(Evaluator::CoeffReadCost) + int(NumTraits<Scalar>::AddCost)) <= EIGEN_UNROLLING_LIMIT
112 Evaluator evaluator(derived());
114 return internal::any_unroller<Evaluator, unroll ? int(
SizeAtCompileTime) :
Dynamic, InnerSizeAtCompileTime>::run(evaluator);
117 for(
Index i = 0; i < derived().outerSize(); ++i)
118 for(
Index j = 0; j < derived().innerSize(); ++j)
128template<
typename Derived>
138template<
typename Derived>
141#if EIGEN_COMP_MSVC || (defined __FAST_MATH__)
142 return derived().array().isNaN().any();
144 return !((derived().array()==derived().array()).all());
152template<
typename Derived>
155#if EIGEN_COMP_MSVC || (defined __FAST_MATH__)
156 return derived().array().isFinite().all();
158 return !((derived()-derived()).hasNaN());
Index count() const
Definition BooleanRedux.h:129
@ SizeAtCompileTime
Definition DenseBase.h:113
@ IsRowMajor
Definition DenseBase.h:170
bool hasNaN() const
Definition BooleanRedux.h:139
bool any() const
Definition BooleanRedux.h:105
CastXpr< NewType >::Type cast() const
Definition DenseBase.h:63
bool all() const
Definition BooleanRedux.h:81
bool allFinite() const
Definition BooleanRedux.h:153
@ RowMajor
Definition Constants.h:321
Namespace containing all symbols from the Eigen library.
Definition B01_Experimental.dox:1
EIGEN_DEFAULT_DENSE_INDEX_TYPE Index
The Index type as used for the API.
Definition Meta.h:74
const int Dynamic
Definition Constants.h:22