10#ifndef EIGEN_CXX11_TENSOR_TENSOR_INDEX_LIST_H
11#define EIGEN_CXX11_TENSOR_TENSOR_INDEX_LIST_H
14#if EIGEN_HAS_CONSTEXPR && EIGEN_HAS_VARIADIC_TEMPLATES
16#define EIGEN_HAS_INDEX_LIST
42 static const Index value = n;
43 EIGEN_DEVICE_FUNC
constexpr operator Index()
const {
return n; }
44 EIGEN_DEVICE_FUNC
void set(Index val) {
45 eigen_assert(val == n);
51template <Index f, Index s>
52struct type2indexpair {
53 static const Index first = f;
54 static const Index second = s;
56 constexpr EIGEN_DEVICE_FUNC
operator IndexPair<Index>()
const {
57 return IndexPair<Index>(f, s);
60 EIGEN_DEVICE_FUNC
void set(
const IndexPair<Index>& val) {
61 eigen_assert(val.first == f);
62 eigen_assert(val.second == s);
67template<Index n>
struct NumTraits<type2index<n> >
72 RequireInitialization =
false,
78 EIGEN_DEVICE_FUNC
static EIGEN_CONSTEXPR EIGEN_STRONG_INLINE Real epsilon() {
return 0; }
79 EIGEN_DEVICE_FUNC
static EIGEN_CONSTEXPR EIGEN_STRONG_INLINE Real dummy_precision() {
return 0; }
80 EIGEN_DEVICE_FUNC
static EIGEN_CONSTEXPR EIGEN_STRONG_INLINE Real highest() {
return n; }
81 EIGEN_DEVICE_FUNC
static EIGEN_CONSTEXPR EIGEN_STRONG_INLINE Real lowest() {
return n; }
86EIGEN_DEVICE_FUNC
void update_value(T& val,
Index new_val) {
87 val = internal::convert_index<T>(new_val);
90EIGEN_DEVICE_FUNC
void update_value(type2index<n>& val,
Index new_val) {
95EIGEN_DEVICE_FUNC
void update_value(T& val, IndexPair<Index> new_val) {
98template <Index f, Index s>
99EIGEN_DEVICE_FUNC
void update_value(type2indexpair<f, s>& val, IndexPair<Index> new_val) {
105struct is_compile_time_constant {
106 static constexpr bool value =
false;
110struct is_compile_time_constant<type2index<idx> > {
111 static constexpr bool value =
true;
114struct is_compile_time_constant<const type2index<idx> > {
115 static constexpr bool value =
true;
118struct is_compile_time_constant<type2index<idx>& > {
119 static constexpr bool value =
true;
122struct is_compile_time_constant<const type2index<idx>& > {
123 static constexpr bool value =
true;
126template <Index f, Index s>
127struct is_compile_time_constant<type2indexpair<f, s> > {
128 static constexpr bool value =
true;
130template <Index f, Index s>
131struct is_compile_time_constant<const type2indexpair<f, s> > {
132 static constexpr bool value =
true;
134template <Index f, Index s>
135struct is_compile_time_constant<type2indexpair<f, s>& > {
136 static constexpr bool value =
true;
138template <Index f, Index s>
139struct is_compile_time_constant<const type2indexpair<f, s>& > {
140 static constexpr bool value =
true;
144template<
typename... T>
147template<
typename T,
typename... O>
148struct IndexTuple<T, O...> {
149 EIGEN_DEVICE_FUNC
constexpr IndexTuple() : head(), others() { }
150 EIGEN_DEVICE_FUNC
constexpr IndexTuple(
const T& v,
const O... o) : head(v), others(o...) { }
152 constexpr static int count = 1 +
sizeof...(O);
154 IndexTuple<O...> others;
156 typedef IndexTuple<O...> Other;
160 struct IndexTuple<T> {
161 EIGEN_DEVICE_FUNC
constexpr IndexTuple() : head() { }
162 EIGEN_DEVICE_FUNC
constexpr IndexTuple(
const T& v) : head(v) { }
164 constexpr static int count = 1;
170template<
int N,
typename... T>
171struct IndexTupleExtractor;
173template<
int N,
typename T,
typename... O>
174struct IndexTupleExtractor<N, T, O...> {
176 typedef typename IndexTupleExtractor<N-1, O...>::ValType ValType;
178 EIGEN_DEVICE_FUNC
static constexpr ValType& get_val(IndexTuple<T, O...>& val) {
179 return IndexTupleExtractor<N-1, O...>::get_val(val.others);
182 EIGEN_DEVICE_FUNC
static constexpr const ValType& get_val(
const IndexTuple<T, O...>& val) {
183 return IndexTupleExtractor<N-1, O...>::get_val(val.others);
185 template <
typename V>
186 EIGEN_DEVICE_FUNC
static void set_val(IndexTuple<T, O...>& val, V& new_val) {
187 IndexTupleExtractor<N-1, O...>::set_val(val.others, new_val);
192template<
typename T,
typename... O>
193 struct IndexTupleExtractor<0, T, O...> {
197 EIGEN_DEVICE_FUNC
static constexpr ValType& get_val(IndexTuple<T, O...>& val) {
200 EIGEN_DEVICE_FUNC
static constexpr const ValType& get_val(
const IndexTuple<T, O...>& val) {
203 template <
typename V>
204 EIGEN_DEVICE_FUNC
static void set_val(IndexTuple<T, O...>& val, V& new_val) {
211template <
int N,
typename T,
typename... O>
212EIGEN_DEVICE_FUNC
constexpr typename IndexTupleExtractor<N, T, O...>::ValType& array_get(IndexTuple<T, O...>& tuple) {
213 return IndexTupleExtractor<N, T, O...>::get_val(tuple);
215template <
int N,
typename T,
typename... O>
216EIGEN_DEVICE_FUNC
constexpr const typename IndexTupleExtractor<N, T, O...>::ValType& array_get(
const IndexTuple<T, O...>& tuple) {
217 return IndexTupleExtractor<N, T, O...>::get_val(tuple);
219template <
typename T,
typename... O>
220 struct array_size<IndexTuple<T, O...> > {
221 static const size_t value = IndexTuple<T, O...>::count;
223template <
typename T,
typename... O>
224 struct array_size<const IndexTuple<T, O...> > {
225 static const size_t value = IndexTuple<T, O...>::count;
231template <Index Idx,
typename ValueT>
233 template <
typename... T>
234 EIGEN_DEVICE_FUNC
static constexpr ValueT get(
const Index i,
const IndexTuple<T...>& t) {
236 return (i == Idx ? array_get<Idx>(t) : tuple_coeff<Idx-1, ValueT>::get(i, t));
238 template <
typename... T>
239 EIGEN_DEVICE_FUNC
static void set(
const Index i, IndexTuple<T...>& t,
const ValueT& value) {
241 update_value(array_get<Idx>(t), value);
243 tuple_coeff<Idx-1, ValueT>::set(i, t, value);
247 template <
typename... T>
248 EIGEN_DEVICE_FUNC
static constexpr bool value_known_statically(
const Index i,
const IndexTuple<T...>& t) {
249 return ((i == Idx) & is_compile_time_constant<
typename IndexTupleExtractor<Idx, T...>::ValType>::value) ||
250 tuple_coeff<Idx-1, ValueT>::value_known_statically(i, t);
253 template <
typename... T>
254 EIGEN_DEVICE_FUNC
static constexpr bool values_up_to_known_statically(
const IndexTuple<T...>& t) {
255 return is_compile_time_constant<
typename IndexTupleExtractor<Idx, T...>::ValType>::value &&
256 tuple_coeff<Idx-1, ValueT>::values_up_to_known_statically(t);
259 template <
typename... T>
260 EIGEN_DEVICE_FUNC
static constexpr bool values_up_to_statically_known_to_increase(
const IndexTuple<T...>& t) {
261 return is_compile_time_constant<
typename IndexTupleExtractor<Idx, T...>::ValType>::value &&
262 is_compile_time_constant<
typename IndexTupleExtractor<Idx, T...>::ValType>::value &&
263 array_get<Idx>(t) > array_get<Idx-1>(t) &&
264 tuple_coeff<Idx-1, ValueT>::values_up_to_statically_known_to_increase(t);
268template <
typename ValueT>
269struct tuple_coeff<0, ValueT> {
270 template <
typename... T>
271 EIGEN_DEVICE_FUNC
static constexpr ValueT get(
const Index ,
const IndexTuple<T...>& t) {
273 return array_get<0>(t);
275 template <
typename... T>
276 EIGEN_DEVICE_FUNC
static void set(
const Index i, IndexTuple<T...>& t,
const ValueT value) {
277 eigen_assert (i == 0);
278 update_value(array_get<0>(t), value);
280 template <
typename... T>
281 EIGEN_DEVICE_FUNC
static constexpr bool value_known_statically(
const Index i,
const IndexTuple<T...>&) {
282 return is_compile_time_constant<
typename IndexTupleExtractor<0, T...>::ValType>::value && (i == 0);
285 template <
typename... T>
286 EIGEN_DEVICE_FUNC
static constexpr bool values_up_to_known_statically(
const IndexTuple<T...>&) {
287 return is_compile_time_constant<
typename IndexTupleExtractor<0, T...>::ValType>::value;
290 template <
typename... T>
291 EIGEN_DEVICE_FUNC
static constexpr bool values_up_to_statically_known_to_increase(
const IndexTuple<T...>&) {
299template<
typename FirstType,
typename... OtherTypes>
300struct IndexList : internal::IndexTuple<FirstType, OtherTypes...> {
301 EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC
constexpr Index operator[] (
const Index i)
const {
302 return internal::tuple_coeff<internal::array_size<internal::IndexTuple<FirstType, OtherTypes...> >::value-1,
Index>::get(i, *
this);
304 EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC
constexpr Index get(
const Index i)
const {
305 return internal::tuple_coeff<internal::array_size<internal::IndexTuple<FirstType, OtherTypes...> >::value-1,
Index>::get(i, *
this);
307 EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC
void set(
const Index i,
const Index value) {
308 return internal::tuple_coeff<internal::array_size<internal::IndexTuple<FirstType, OtherTypes...> >::value-1,
Index>::set(i, *
this, value);
311 EIGEN_DEVICE_FUNC
constexpr IndexList(
const internal::IndexTuple<FirstType, OtherTypes...>& other) : internal::IndexTuple<FirstType, OtherTypes...>(other) { }
312 EIGEN_DEVICE_FUNC
constexpr IndexList(FirstType& first, OtherTypes... other) : internal::IndexTuple<FirstType, OtherTypes...>(first, other...) { }
313 EIGEN_DEVICE_FUNC
constexpr IndexList() : internal::IndexTuple<FirstType, OtherTypes...>() { }
315 EIGEN_DEVICE_FUNC
constexpr bool value_known_statically(
const Index i)
const {
316 return internal::tuple_coeff<internal::array_size<internal::IndexTuple<FirstType, OtherTypes...> >::value-1,
Index>::value_known_statically(i, *
this);
318 EIGEN_DEVICE_FUNC
constexpr bool all_values_known_statically()
const {
319 return internal::tuple_coeff<internal::array_size<internal::IndexTuple<FirstType, OtherTypes...> >::value-1,
Index>::values_up_to_known_statically(*
this);
322 EIGEN_DEVICE_FUNC
constexpr bool values_statically_known_to_increase()
const {
323 return internal::tuple_coeff<internal::array_size<internal::IndexTuple<FirstType, OtherTypes...> >::value-1,
Index>::values_up_to_statically_known_to_increase(*
this);
327template <
typename FirstType,
typename... OtherTypes>
328std::ostream& operator<<(std::ostream& os,
329 const IndexList<FirstType, OtherTypes...>& dims) {
331 for (
size_t i = 0; i < 1 +
sizeof...(OtherTypes); ++i) {
332 if (i > 0) os <<
", ";
339template<
typename FirstType,
typename... OtherTypes>
340constexpr IndexList<FirstType, OtherTypes...> make_index_list(FirstType val1, OtherTypes... other_vals) {
341 return IndexList<FirstType, OtherTypes...>(val1, other_vals...);
345template<
typename FirstType,
typename... OtherTypes>
346struct IndexPairList : internal::IndexTuple<FirstType, OtherTypes...> {
347 EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC
constexpr IndexPair<Index> operator[] (
const Index i)
const {
348 return internal::tuple_coeff<internal::array_size<internal::IndexTuple<FirstType, OtherTypes...> >::value-1, IndexPair<Index>>::get(i, *
this);
350 EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC
void set(
const Index i,
const IndexPair<Index> value) {
351 return internal::tuple_coeff<internal::array_size<internal::IndexTuple<FirstType, OtherTypes...>>::value-1, IndexPair<Index> >::set(i, *
this, value);
354 EIGEN_DEVICE_FUNC
constexpr IndexPairList(
const internal::IndexTuple<FirstType, OtherTypes...>& other) : internal::IndexTuple<FirstType, OtherTypes...>(other) { }
355 EIGEN_DEVICE_FUNC
constexpr IndexPairList() : internal::IndexTuple<FirstType, OtherTypes...>() { }
357 EIGEN_DEVICE_FUNC
constexpr bool value_known_statically(
const Index i)
const {
358 return internal::tuple_coeff<internal::array_size<internal::IndexTuple<FirstType, OtherTypes...> >::value-1,
Index>::value_known_statically(i, *
this);
364template<
typename FirstType,
typename... OtherTypes>
365EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
Index array_prod(
const IndexList<FirstType, OtherTypes...>& sizes) {
368 for (
size_t i = 0; i < array_size<IndexList<FirstType, OtherTypes...> >::value; ++i) {
374template<
typename FirstType,
typename... OtherTypes>
struct array_size<IndexList<FirstType, OtherTypes...> > {
375 static const size_t value = array_size<IndexTuple<FirstType, OtherTypes...> >::value;
377template<
typename FirstType,
typename... OtherTypes>
struct array_size<const IndexList<FirstType, OtherTypes...> > {
378 static const size_t value = array_size<IndexTuple<FirstType, OtherTypes...> >::value;
381template<
typename FirstType,
typename... OtherTypes>
struct array_size<IndexPairList<FirstType, OtherTypes...> > {
382 static const size_t value = std::tuple_size<std::tuple<FirstType, OtherTypes...> >::value;
384template<
typename FirstType,
typename... OtherTypes>
struct array_size<const IndexPairList<FirstType, OtherTypes...> > {
385 static const size_t value = std::tuple_size<std::tuple<FirstType, OtherTypes...> >::value;
388template<
Index N,
typename FirstType,
typename... OtherTypes> EIGEN_DEVICE_FUNC
constexpr Index array_get(IndexList<FirstType, OtherTypes...>& a) {
389 return IndexTupleExtractor<N, FirstType, OtherTypes...>::get_val(a);
391template<
Index N,
typename FirstType,
typename... OtherTypes> EIGEN_DEVICE_FUNC
constexpr Index array_get(
const IndexList<FirstType, OtherTypes...>& a) {
392 return IndexTupleExtractor<N, FirstType, OtherTypes...>::get_val(a);
396struct index_known_statically_impl {
397 EIGEN_DEVICE_FUNC
static constexpr bool run(
const Index) {
402template <
typename FirstType,
typename... OtherTypes>
403struct index_known_statically_impl<IndexList<FirstType, OtherTypes...> > {
404 EIGEN_DEVICE_FUNC
static constexpr bool run(
const Index i) {
405 return IndexList<FirstType, OtherTypes...>().value_known_statically(i);
409template <
typename FirstType,
typename... OtherTypes>
410struct index_known_statically_impl<const IndexList<FirstType, OtherTypes...> > {
411 EIGEN_DEVICE_FUNC
static constexpr bool run(
const Index i) {
412 return IndexList<FirstType, OtherTypes...>().value_known_statically(i);
418struct all_indices_known_statically_impl {
419 static constexpr bool run() {
424template <
typename FirstType,
typename... OtherTypes>
425struct all_indices_known_statically_impl<IndexList<FirstType, OtherTypes...> > {
426 EIGEN_DEVICE_FUNC
static constexpr bool run() {
427 return IndexList<FirstType, OtherTypes...>().all_values_known_statically();
431template <
typename FirstType,
typename... OtherTypes>
432struct all_indices_known_statically_impl<const IndexList<FirstType, OtherTypes...> > {
433 EIGEN_DEVICE_FUNC
static constexpr bool run() {
434 return IndexList<FirstType, OtherTypes...>().all_values_known_statically();
440struct indices_statically_known_to_increase_impl {
441 EIGEN_DEVICE_FUNC
static constexpr bool run() {
446template <
typename FirstType,
typename... OtherTypes>
447 struct indices_statically_known_to_increase_impl<IndexList<FirstType, OtherTypes...> > {
448 EIGEN_DEVICE_FUNC
static constexpr bool run() {
449 return Eigen::IndexList<FirstType, OtherTypes...>().values_statically_known_to_increase();
453template <
typename FirstType,
typename... OtherTypes>
454 struct indices_statically_known_to_increase_impl<const IndexList<FirstType, OtherTypes...> > {
455 EIGEN_DEVICE_FUNC
static constexpr bool run() {
456 return Eigen::IndexList<FirstType, OtherTypes...>().values_statically_known_to_increase();
461template <
typename Tx>
462struct index_statically_eq_impl {
463 EIGEN_DEVICE_FUNC
static constexpr bool run(
Index,
Index) {
468template <
typename FirstType,
typename... OtherTypes>
469struct index_statically_eq_impl<IndexList<FirstType, OtherTypes...> > {
470 EIGEN_DEVICE_FUNC
static constexpr bool run(
const Index i,
const Index value) {
471 return IndexList<FirstType, OtherTypes...>().value_known_statically(i) &
472 (IndexList<FirstType, OtherTypes...>().get(i) == value);
476template <
typename FirstType,
typename... OtherTypes>
477struct index_statically_eq_impl<const IndexList<FirstType, OtherTypes...> > {
478 EIGEN_DEVICE_FUNC
static constexpr bool run(
const Index i,
const Index value) {
479 return IndexList<FirstType, OtherTypes...>().value_known_statically(i) &
480 (IndexList<FirstType, OtherTypes...>().get(i) == value);
486struct index_statically_ne_impl {
487 EIGEN_DEVICE_FUNC
static constexpr bool run(
Index,
Index) {
492template <
typename FirstType,
typename... OtherTypes>
493struct index_statically_ne_impl<IndexList<FirstType, OtherTypes...> > {
494 EIGEN_DEVICE_FUNC
static constexpr bool run(
const Index i,
const Index value) {
495 return IndexList<FirstType, OtherTypes...>().value_known_statically(i) &
496 (IndexList<FirstType, OtherTypes...>().get(i) != value);
500template <
typename FirstType,
typename... OtherTypes>
501struct index_statically_ne_impl<const IndexList<FirstType, OtherTypes...> > {
502 EIGEN_DEVICE_FUNC
static constexpr bool run(
const Index i,
const Index value) {
503 return IndexList<FirstType, OtherTypes...>().value_known_statically(i) &
504 (IndexList<FirstType, OtherTypes...>().get(i) != value);
510struct index_statically_gt_impl {
511 EIGEN_DEVICE_FUNC
static constexpr bool run(
Index,
Index) {
516template <
typename FirstType,
typename... OtherTypes>
517struct index_statically_gt_impl<IndexList<FirstType, OtherTypes...> > {
518 EIGEN_DEVICE_FUNC
static constexpr bool run(
const Index i,
const Index value) {
519 return IndexList<FirstType, OtherTypes...>().value_known_statically(i) &
520 (IndexList<FirstType, OtherTypes...>().get(i) > value);
524template <
typename FirstType,
typename... OtherTypes>
525struct index_statically_gt_impl<const IndexList<FirstType, OtherTypes...> > {
526 EIGEN_DEVICE_FUNC
static constexpr bool run(
const Index i,
const Index value) {
527 return IndexList<FirstType, OtherTypes...>().value_known_statically(i) &
528 (IndexList<FirstType, OtherTypes...>().get(i) > value);
535struct index_statically_lt_impl {
536 EIGEN_DEVICE_FUNC
static constexpr bool run(
Index,
Index) {
541template <
typename FirstType,
typename... OtherTypes>
542struct index_statically_lt_impl<IndexList<FirstType, OtherTypes...> > {
543 EIGEN_DEVICE_FUNC
static constexpr bool run(
const Index i,
const Index value) {
544 return IndexList<FirstType, OtherTypes...>().value_known_statically(i) &
545 (IndexList<FirstType, OtherTypes...>().get(i) < value);
549template <
typename FirstType,
typename... OtherTypes>
550struct index_statically_lt_impl<const IndexList<FirstType, OtherTypes...> > {
551 EIGEN_DEVICE_FUNC
static constexpr bool run(
const Index i,
const Index value) {
552 return IndexList<FirstType, OtherTypes...>().value_known_statically(i) &
553 (IndexList<FirstType, OtherTypes...>().get(i) < value);
559template <
typename Tx>
560struct index_pair_first_statically_eq_impl {
561 EIGEN_DEVICE_FUNC
static constexpr bool run(
Index,
Index) {
566template <
typename FirstType,
typename... OtherTypes>
567struct index_pair_first_statically_eq_impl<IndexPairList<FirstType, OtherTypes...> > {
568 EIGEN_DEVICE_FUNC
static constexpr bool run(
const Index i,
const Index value) {
569 return IndexPairList<FirstType, OtherTypes...>().value_known_statically(i) &
570 (IndexPairList<FirstType, OtherTypes...>().
operator[](i).first == value);
574template <
typename FirstType,
typename... OtherTypes>
575struct index_pair_first_statically_eq_impl<const IndexPairList<FirstType, OtherTypes...> > {
576 EIGEN_DEVICE_FUNC
static constexpr bool run(
const Index i,
const Index value) {
577 return IndexPairList<FirstType, OtherTypes...>().value_known_statically(i) &
578 (IndexPairList<FirstType, OtherTypes...>().
operator[](i).first == value);
584template <
typename Tx>
585struct index_pair_second_statically_eq_impl {
586 EIGEN_DEVICE_FUNC
static constexpr bool run(
Index,
Index) {
591template <
typename FirstType,
typename... OtherTypes>
592struct index_pair_second_statically_eq_impl<IndexPairList<FirstType, OtherTypes...> > {
593 EIGEN_DEVICE_FUNC
static constexpr bool run(
const Index i,
const Index value) {
594 return IndexPairList<FirstType, OtherTypes...>().value_known_statically(i) &
595 (IndexPairList<FirstType, OtherTypes...>().
operator[](i).second == value);
599template <
typename FirstType,
typename... OtherTypes>
600struct index_pair_second_statically_eq_impl<const IndexPairList<FirstType, OtherTypes...> > {
601 EIGEN_DEVICE_FUNC
static constexpr bool run(
const Index i,
const Index value) {
602 return IndexPairList<FirstType, OtherTypes...>().value_known_statically(i) &
603 (IndexPairList<FirstType, OtherTypes...>().
operator[](i).second == value);
617struct index_known_statically_impl {
618 static EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE
bool run(
const Index) {
624struct all_indices_known_statically_impl {
625 static EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE
bool run() {
631struct indices_statically_known_to_increase_impl {
632 static EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE
bool run() {
638struct index_statically_eq_impl {
639 static EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE
bool run(
Index,
Index) {
645struct index_statically_ne_impl {
646 static EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE
bool run(
Index,
Index) {
652struct index_statically_gt_impl {
653 static EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE
bool run(
Index,
Index) {
659struct index_statically_lt_impl {
660 static EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE
bool run(
Index,
Index) {
665template <
typename Tx>
666struct index_pair_first_statically_eq_impl {
667 static EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE
bool run(
Index,
Index) {
672template <
typename Tx>
673struct index_pair_second_statically_eq_impl {
674 static EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE
bool run(
Index,
Index) {
690static EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR
bool index_known_statically(
Index i) {
691 return index_known_statically_impl<T>::run(i);
695static EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR
bool all_indices_known_statically() {
696 return all_indices_known_statically_impl<T>::run();
700static EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR
bool indices_statically_known_to_increase() {
701 return indices_statically_known_to_increase_impl<T>::run();
705static EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR
bool index_statically_eq(
Index i,
Index value) {
706 return index_statically_eq_impl<T>::run(i, value);
710static EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR
bool index_statically_ne(
Index i,
Index value) {
711 return index_statically_ne_impl<T>::run(i, value);
715static EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR
bool index_statically_gt(
Index i,
Index value) {
716 return index_statically_gt_impl<T>::run(i, value);
720static EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR
bool index_statically_lt(
Index i,
Index value) {
721 return index_statically_lt_impl<T>::run(i, value);
725static EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR
bool index_pair_first_statically_eq(
Index i,
Index value) {
726 return index_pair_first_statically_eq_impl<T>::run(i, value);
730static EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR
bool index_pair_second_statically_eq(
Index i,
Index value) {
731 return index_pair_second_statically_eq_impl<T>::run(i, value);
Namespace containing all symbols from the Eigen library.
EIGEN_DEFAULT_DENSE_INDEX_TYPE Index