12b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang// This file is part of Eigen, a lightweight C++ template library
22b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang// for linear algebra.
32b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang//
42b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang// Copyright (C) 2015 Benoit Steiner <benoit.steiner.goog@gmail.com>
52b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang//
62b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang// This Source Code Form is subject to the terms of the Mozilla
72b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang// Public License v. 2.0. If a copy of the MPL was not distributed
82b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang// with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
92b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang
102b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang#ifndef EIGEN_CXX11_TENSOR_TENSOR_DIMENSION_LIST_H
112b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang#define EIGEN_CXX11_TENSOR_TENSOR_DIMENSION_LIST_H
122b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang
132b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wangnamespace Eigen {
142b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang
152b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang/** \internal
162b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang  *
172b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang  * \class TensorDimensionList
182b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang  * \ingroup CXX11_Tensor_Module
192b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang  *
202b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang  * \brief Special case of tensor index list used to list all the dimensions of a tensor of rank n.
212b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang  *
222b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang  * \sa Tensor
232b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang  */
242b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang
252b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wangtemplate <typename Index, std::size_t Rank> struct DimensionList {
262b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang  EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE
272b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang  const Index operator[] (const Index i) const { return i; }
282b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang};
292b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang
302b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wangnamespace internal {
312b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang
322b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wangtemplate<typename Index, std::size_t Rank> struct array_size<DimensionList<Index, Rank> > {
332b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang  static const size_t value = Rank;
342b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang};
352b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wangtemplate<typename Index, std::size_t Rank> struct array_size<const DimensionList<Index, Rank> > {
362b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang  static const size_t value = Rank;
372b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang};
382b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang
392b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wangtemplate<DenseIndex n, typename Index, std::size_t Rank> const Index array_get(DimensionList<Index, Rank>&) {
402b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang  return n;
412b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang}
422b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wangtemplate<DenseIndex n, typename Index, std::size_t Rank> const Index array_get(const DimensionList<Index, Rank>&) {
432b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang  return n;
442b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang}
452b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang
462b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang
472b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang#if EIGEN_HAS_CONSTEXPR
482b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wangtemplate <typename Index, std::size_t Rank>
492b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wangstruct index_known_statically_impl<DimensionList<Index, Rank> > {
502b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang  EIGEN_DEVICE_FUNC static constexpr bool run(const DenseIndex) {
512b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang    return true;
522b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang  }
532b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang};
542b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wangtemplate <typename Index, std::size_t Rank>
552b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wangstruct index_known_statically_impl<const DimensionList<Index, Rank> > {
562b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang  EIGEN_DEVICE_FUNC static constexpr bool run(const DenseIndex) {
572b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang    return true;
582b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang  }
592b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang};
602b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang
612b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wangtemplate <typename Index, std::size_t Rank>
622b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wangstruct all_indices_known_statically_impl<DimensionList<Index, Rank> > {
632b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang  EIGEN_DEVICE_FUNC static constexpr bool run() {
642b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang    return true;
652b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang  }
662b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang};
672b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wangtemplate <typename Index, std::size_t Rank>
682b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wangstruct all_indices_known_statically_impl<const DimensionList<Index, Rank> > {
692b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang  EIGEN_DEVICE_FUNC static constexpr bool run() {
702b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang    return true;
712b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang  }
722b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang};
732b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang
742b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wangtemplate <typename Index, std::size_t Rank>
752b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wangstruct indices_statically_known_to_increase_impl<DimensionList<Index, Rank> > {
762b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang  EIGEN_DEVICE_FUNC static constexpr bool run() {
772b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang    return true;
782b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang  }
792b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang};
802b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wangtemplate <typename Index, std::size_t Rank>
812b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wangstruct indices_statically_known_to_increase_impl<const DimensionList<Index, Rank> > {
822b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang  EIGEN_DEVICE_FUNC static constexpr bool run() {
832b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang    return true;
842b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang  }
852b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang};
862b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang
872b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wangtemplate <typename Index, std::size_t Rank>
882b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wangstruct index_statically_eq_impl<DimensionList<Index, Rank> > {
892b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang  static constexpr bool run(const DenseIndex i, const DenseIndex value) {
902b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang    return i == value;
912b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang  }
922b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang};
932b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wangtemplate <typename Index, std::size_t Rank>
942b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wangstruct index_statically_eq_impl<const DimensionList<Index, Rank> > {
952b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang  EIGEN_DEVICE_FUNC static constexpr bool run(const DenseIndex i, const DenseIndex value) {
962b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang    return i == value;
972b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang  }
982b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang};
992b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang
1002b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wangtemplate <typename Index, std::size_t Rank>
1012b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wangstruct index_statically_ne_impl<DimensionList<Index, Rank> > {
1022b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang  EIGEN_DEVICE_FUNC static constexpr bool run(const DenseIndex i, const DenseIndex value) {
1032b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang    return i != value;
1042b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang  }
1052b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang};
1062b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wangtemplate <typename Index, std::size_t Rank>
1072b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wangstruct index_statically_ne_impl<const DimensionList<Index, Rank> > {
1082b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang  static constexpr bool run(const DenseIndex i, const DenseIndex value) {
1092b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang    return i != value;
1102b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang  }
1112b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang};
1122b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang
1132b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wangtemplate <typename Index, std::size_t Rank>
1142b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wangstruct index_statically_gt_impl<DimensionList<Index, Rank> > {
1152b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang  EIGEN_DEVICE_FUNC static constexpr bool run(const DenseIndex i, const DenseIndex value) {
1162b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang    return i > value;
1172b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang  }
1182b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang};
1192b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wangtemplate <typename Index, std::size_t Rank>
1202b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wangstruct index_statically_gt_impl<const DimensionList<Index, Rank> > {
1212b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang  EIGEN_DEVICE_FUNC static constexpr bool run(const DenseIndex i, const DenseIndex value) {
1222b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang    return i > value;
1232b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang  }
1242b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang};
1252b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang
1262b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wangtemplate <typename Index, std::size_t Rank>
1272b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wangstruct index_statically_lt_impl<DimensionList<Index, Rank> > {
1282b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang  EIGEN_DEVICE_FUNC static constexpr bool run(const DenseIndex i, const DenseIndex value) {
1292b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang    return i < value;
1302b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang  }
1312b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang};
1322b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wangtemplate <typename Index, std::size_t Rank>
1332b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wangstruct index_statically_lt_impl<const DimensionList<Index, Rank> > {
1342b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang  EIGEN_DEVICE_FUNC static constexpr bool run(const DenseIndex i, const DenseIndex value) {
1352b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang    return i < value;
1362b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang  }
1372b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang};
1382b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang
1392b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang#else
1402b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wangtemplate <typename Index, std::size_t Rank>
1412b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wangstruct index_known_statically_impl<DimensionList<Index, Rank> > {
1422b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang  EIGEN_DEVICE_FUNC static EIGEN_ALWAYS_INLINE bool run(const DenseIndex) {
1432b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang    return true;
1442b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang  }
1452b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang};
1462b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wangtemplate <typename Index, std::size_t Rank>
1472b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wangstruct index_known_statically_impl<const DimensionList<Index, Rank> > {
1482b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang  EIGEN_DEVICE_FUNC static EIGEN_ALWAYS_INLINE bool run(const DenseIndex) {
1492b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang    return true;
1502b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang  }
1512b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang};
1522b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang
1532b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wangtemplate <typename Index, std::size_t Rank>
1542b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wangstruct all_indices_known_statically_impl<DimensionList<Index, Rank> > {
1552b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang  EIGEN_DEVICE_FUNC static EIGEN_ALWAYS_INLINE bool run() {
1562b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang    return true;
1572b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang  }
1582b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang};
1592b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wangtemplate <typename Index, std::size_t Rank>
1602b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wangstruct all_indices_known_statically_impl<const DimensionList<Index, Rank> > {
1612b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang  EIGEN_DEVICE_FUNC static EIGEN_ALWAYS_INLINE bool run() {
1622b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang    return true;
1632b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang  }
1642b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang};
1652b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang
1662b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wangtemplate <typename Index, std::size_t Rank>
1672b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wangstruct indices_statically_known_to_increase_impl<DimensionList<Index, Rank> > {
1682b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang  static EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE bool run() {
1692b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang    return true;
1702b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang  }
1712b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang};
1722b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wangtemplate <typename Index, std::size_t Rank>
1732b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wangstruct indices_statically_known_to_increase_impl<const DimensionList<Index, Rank> > {
1742b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang  static EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE bool run() {
1752b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang    return true;
1762b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang  }
1772b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang};
1782b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang
1792b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wangtemplate <typename Index, std::size_t Rank>
1802b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wangstruct index_statically_eq_impl<DimensionList<Index, Rank> > {
1812b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang  static EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE bool run(const DenseIndex, const DenseIndex) {
1822b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang    return false;
1832b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang  }
1842b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang};
1852b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wangtemplate <typename Index, std::size_t Rank>
1862b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wangstruct index_statically_eq_impl<const DimensionList<Index, Rank> > {
1872b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang  static EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE bool run(const DenseIndex, const DenseIndex) {
1882b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang    return false;
1892b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang  }
1902b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang};
1912b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang
1922b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wangtemplate <typename Index, std::size_t Rank>
1932b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wangstruct index_statically_ne_impl<DimensionList<Index, Rank> > {
1942b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang  static EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE bool run(const DenseIndex, const DenseIndex){
1952b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang    return false;
1962b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang  }
1972b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang};
1982b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wangtemplate <typename Index, std::size_t Rank>
1992b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wangstruct index_statically_ne_impl<const DimensionList<Index, Rank> > {
2002b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang  static EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE bool run(const DenseIndex, const DenseIndex) {
2012b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang    return false;
2022b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang  }
2032b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang};
2042b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang
2052b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wangtemplate <typename Index, std::size_t Rank>
2062b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wangstruct index_statically_gt_impl<DimensionList<Index, Rank> > {
2072b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang  static EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE bool run(const DenseIndex, const DenseIndex) {
2082b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang    return false;
2092b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang  }
2102b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang};
2112b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wangtemplate <typename Index, std::size_t Rank>
2122b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wangstruct index_statically_gt_impl<const DimensionList<Index, Rank> > {
2132b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang  static EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE bool run(const DenseIndex, const DenseIndex) {
2142b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang    return false;
2152b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang  }
2162b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang};
2172b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang
2182b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wangtemplate <typename Index, std::size_t Rank>
2192b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wangstruct index_statically_lt_impl<DimensionList<Index, Rank> > {
2202b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang  static EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE bool run(const DenseIndex, const DenseIndex) {
2212b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang    return false;
2222b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang  }
2232b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang};
2242b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wangtemplate <typename Index, std::size_t Rank>
2252b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wangstruct index_statically_lt_impl<const DimensionList<Index, Rank> > {
2262b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang  static EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE bool run(const DenseIndex, const DenseIndex) {
2272b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang    return false;
2282b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang  }
2292b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang};
2302b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang#endif
2312b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang
2322b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang}  // end namespace internal
2332b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang}  // end namespace Eigen
2342b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang
2352b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang
2362b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang#endif // EIGEN_CXX11_TENSOR_TENSOR_DIMENSION_LIST_H
237