// This file is part of Eigen, a lightweight C++ template library // for linear algebra. // // Copyright (C) 2015 Benoit Steiner // // This Source Code Form is subject to the terms of the Mozilla // Public License v. 2.0. If a copy of the MPL was not distributed // with this file, You can obtain one at http://mozilla.org/MPL/2.0/. #ifndef EIGEN_CXX11_TENSOR_TENSOR_DIMENSION_LIST_H #define EIGEN_CXX11_TENSOR_TENSOR_DIMENSION_LIST_H namespace Eigen { /** \internal * * \class TensorDimensionList * \ingroup CXX11_Tensor_Module * * \brief Special case of tensor index list used to list all the dimensions of a tensor of rank n. * * \sa Tensor */ template struct DimensionList { EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE const Index operator[] (const Index i) const { return i; } }; namespace internal { template struct array_size > { static const size_t value = Rank; }; template struct array_size > { static const size_t value = Rank; }; template const Index array_get(DimensionList&) { return n; } template const Index array_get(const DimensionList&) { return n; } #if EIGEN_HAS_CONSTEXPR template struct index_known_statically_impl > { EIGEN_DEVICE_FUNC static constexpr bool run(const DenseIndex) { return true; } }; template struct index_known_statically_impl > { EIGEN_DEVICE_FUNC static constexpr bool run(const DenseIndex) { return true; } }; template struct all_indices_known_statically_impl > { EIGEN_DEVICE_FUNC static constexpr bool run() { return true; } }; template struct all_indices_known_statically_impl > { EIGEN_DEVICE_FUNC static constexpr bool run() { return true; } }; template struct indices_statically_known_to_increase_impl > { EIGEN_DEVICE_FUNC static constexpr bool run() { return true; } }; template struct indices_statically_known_to_increase_impl > { EIGEN_DEVICE_FUNC static constexpr bool run() { return true; } }; template struct index_statically_eq_impl > { static constexpr bool run(const DenseIndex i, const DenseIndex value) { return i == value; } }; template struct index_statically_eq_impl > { EIGEN_DEVICE_FUNC static constexpr bool run(const DenseIndex i, const DenseIndex value) { return i == value; } }; template struct index_statically_ne_impl > { EIGEN_DEVICE_FUNC static constexpr bool run(const DenseIndex i, const DenseIndex value) { return i != value; } }; template struct index_statically_ne_impl > { static constexpr bool run(const DenseIndex i, const DenseIndex value) { return i != value; } }; template struct index_statically_gt_impl > { EIGEN_DEVICE_FUNC static constexpr bool run(const DenseIndex i, const DenseIndex value) { return i > value; } }; template struct index_statically_gt_impl > { EIGEN_DEVICE_FUNC static constexpr bool run(const DenseIndex i, const DenseIndex value) { return i > value; } }; template struct index_statically_lt_impl > { EIGEN_DEVICE_FUNC static constexpr bool run(const DenseIndex i, const DenseIndex value) { return i < value; } }; template struct index_statically_lt_impl > { EIGEN_DEVICE_FUNC static constexpr bool run(const DenseIndex i, const DenseIndex value) { return i < value; } }; #else template struct index_known_statically_impl > { EIGEN_DEVICE_FUNC static EIGEN_ALWAYS_INLINE bool run(const DenseIndex) { return true; } }; template struct index_known_statically_impl > { EIGEN_DEVICE_FUNC static EIGEN_ALWAYS_INLINE bool run(const DenseIndex) { return true; } }; template struct all_indices_known_statically_impl > { EIGEN_DEVICE_FUNC static EIGEN_ALWAYS_INLINE bool run() { return true; } }; template struct all_indices_known_statically_impl > { EIGEN_DEVICE_FUNC static EIGEN_ALWAYS_INLINE bool run() { return true; } }; template struct indices_statically_known_to_increase_impl > { static EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE bool run() { return true; } }; template struct indices_statically_known_to_increase_impl > { static EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE bool run() { return true; } }; template struct index_statically_eq_impl > { static EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE bool run(const DenseIndex, const DenseIndex) { return false; } }; template struct index_statically_eq_impl > { static EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE bool run(const DenseIndex, const DenseIndex) { return false; } }; template struct index_statically_ne_impl > { static EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE bool run(const DenseIndex, const DenseIndex){ return false; } }; template struct index_statically_ne_impl > { static EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE bool run(const DenseIndex, const DenseIndex) { return false; } }; template struct index_statically_gt_impl > { static EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE bool run(const DenseIndex, const DenseIndex) { return false; } }; template struct index_statically_gt_impl > { static EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE bool run(const DenseIndex, const DenseIndex) { return false; } }; template struct index_statically_lt_impl > { static EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE bool run(const DenseIndex, const DenseIndex) { return false; } }; template struct index_statically_lt_impl > { static EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE bool run(const DenseIndex, const DenseIndex) { return false; } }; #endif } // end namespace internal } // end namespace Eigen #endif // EIGEN_CXX11_TENSOR_TENSOR_DIMENSION_LIST_H