10 #ifndef EIGEN_CXX11_TENSOR_TENSOR_DIMENSIONS_H
11 #define EIGEN_CXX11_TENSOR_TENSOR_DIMENSIONS_H
37 template <std::ptrdiff_t n,
typename Dimension>
42 template <
typename Index, std::ptrdiff_t NumIndices, std::ptrdiff_t n,
bool RowMajor>
44 template <
typename Dimensions>
46 const Dimensions& dimensions) {
55 template <
typename Index, std::ptrdiff_t NumIndices,
bool RowMajor>
57 template <
typename Dimensions>
63 template <
typename Index, std::ptrdiff_t n>
65 template <
typename Dimensions>
67 const Index mult = (index ==
n - 1) ? 1 : 0;
73 template <
typename Index>
75 template <
typename Dimensions>
84 template <
typename std::ptrdiff_t... Indices>
96 template <
typename DenseIndex>
106 template <
typename T>
116 template <
typename DenseIndex>
121 template <
typename DenseIndex>
129 template <
typename std::ptrdiff_t... Indices>
131 return Sizes<Indices...>::total_size;
137 template <
typename Index, std::ptrdiff_t NumIndices, std::ptrdiff_t n,
bool RowMajor>
144 : (NumIndices -
n - 1) >
146 indices, dimensions);
150 template <
typename Index, std::ptrdiff_t NumIndices,
bool RowMajor>
160 template <
typename DenseIndex,
int NumDims>
172 for (
int i = 0;
i < NumDims; ++
i) {
184 for (
int i = 0;
i < NumDims; ++
i) {
191 template <
typename OtherIndex>
198 for (
int i = 0;
i < NumDims; ++
i) {
203 template <
typename FirstType,
typename... OtherTypes>
205 for (
int i = 0;
i < dimensions.count; ++
i) {
206 (*this)[
i] = dimensions[
i];
210 template <
typename std::ptrdiff_t... Indices>
212 for (
int i = 0;
i < NumDims; ++
i) {
217 template <
typename... IndexTypes>
219 IndexTypes... otherDimensions)
220 :
Base({{firstDimension, secondDimension, otherDimensions...}}) {
221 EIGEN_STATIC_ASSERT(
sizeof...(otherDimensions) + 2 == NumDims, YOU_MADE_A_PROGRAMMING_MISTAKE)
225 *
static_cast<Base*
>(
this) = other;
232 indices, *
static_cast<const Base*
>(
this));
236 indices, *
static_cast<const Base*
>(
this));
240 template <
typename IndexType,
int NumDims>
243 for (
int i = 0;
i < NumDims; ++
i) {
244 if (
i > 0) os <<
", ";
253 template <
typename Index, std::ptrdiff_t NumIndices, std::ptrdiff_t n,
bool RowMajor>
256 std::vector<DenseIndex>
const& dimensions) {
260 : (NumIndices -
n - 1) >
262 indices, dimensions);
266 template <
typename Index, std::ptrdiff_t NumIndices,
bool RowMajor>
269 std::vector<DenseIndex>
const&) {
277 template <
typename DenseIndex,
int NumDims>
279 static const ptrdiff_t
value = NumDims;
281 template <
typename DenseIndex,
int NumDims>
283 static const ptrdiff_t
value = NumDims;
285 template <
typename std::ptrdiff_t... Indices>
287 static const std::ptrdiff_t
value =
Sizes<Indices...>::count;
289 template <
typename std::ptrdiff_t... Indices>
291 static const std::ptrdiff_t
value =
Sizes<Indices...>::count;
293 template <std::ptrdiff_t
n,
typename std::ptrdiff_t... Indices>
297 template <std::ptrdiff_t n>
303 template <
typename Dims1,
typename Dims2, ptrdiff_t n, ptrdiff_t m>
307 template <
typename Dims1,
typename Dims2, ptrdiff_t n>
314 template <
typename Dims1,
typename Dims2>
321 template <
typename Dims1,
typename Dims2>
int i
Definition: BiCGSTAB_step_by_step.cpp:9
const unsigned n
Definition: CG3DPackingUnitTest.cpp:11
#define EIGEN_ALWAYS_INLINE
Definition: Macros.h:845
#define EIGEN_DEVICE_FUNC
Definition: Macros.h:892
#define eigen_assert(x)
Definition: Macros.h:910
#define EIGEN_STRONG_INLINE
Definition: Macros.h:834
#define EIGEN_STATIC_ASSERT(X, MSG)
Definition: StaticAssert.h:26
@ RowMajor
Definition: Constants.h:320
const Scalar * a
Definition: level2_cplx_impl.h:32
constexpr EIGEN_DEVICE_FUNCdecltype(reduce< product_op, Ts... >::run((*((Ts *) 0))...)) EIGEN_STRONG_INLIN arg_prod)(Ts... ts)
Definition: MoreMeta.h:435
constexpr EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE auto array_prod(const array< T, N > &arr) -> decltype(array_reduce< product_op, T, N >(arr, static_cast< T >(1)))
Definition: MoreMeta.h:497
constexpr T & array_get(std::array< T, N > &a)
Definition: EmulateArray.h:251
EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC bool equal_strict(const X &x, const Y &y)
Definition: Meta.h:571
Namespace containing all symbols from the Eigen library.
Definition: bench_norm.cpp:70
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE bool dimensions_match(Dims1 dims1, Dims2 dims2)
Definition: TensorDimensions.h:322
auto run(Kernel kernel, Args &&... args) -> decltype(kernel(args...))
Definition: gpu_test_helper.h:414
std::array< T, N > array
Definition: EmulateArray.h:231
squared absolute value
Definition: GlobalFunctions.h:87
std::ostream & operator<<(std::ostream &s, const DiagonalBase< Derived > &m)
Definition: IO.h:227
EIGEN_DEFAULT_DENSE_INDEX_TYPE Index
The Index type as used for the API.
Definition: Meta.h:83
EIGEN_DEFAULT_DENSE_INDEX_TYPE DenseIndex
Definition: Meta.h:75
Definition: Eigen_Colamd.h:49
Definition: TensorDimensions.h:161
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE DSizes()
Definition: TensorDimensions.h:171
EIGEN_DEVICE_FUNC DSizes(const array< DenseIndex, NumDims > &a)
Definition: TensorDimensions.h:176
EIGEN_DEVICE_FUNC DSizes(const DimensionList< DenseIndex, NumDims > &a)
Definition: TensorDimensions.h:183
EIGEN_DEVICE_FUNC DSizes(const DenseIndex i0)
Definition: TensorDimensions.h:178
EIGEN_DEVICE_FUNC DSizes(const array< OtherIndex, NumDims > &other, std::enable_if_t< internal::is_same< DenseIndex, typename internal::promote_index_type< DenseIndex, OtherIndex >::type >::value, void * >=0)
Definition: TensorDimensions.h:192
static const int count
Definition: TensorDimensions.h:163
EIGEN_DEVICE_FUNC DSizes(const Eigen::IndexList< FirstType, OtherTypes... > &dimensions)
Definition: TensorDimensions.h:204
EIGEN_DEVICE_FUNC DSizes & operator=(const array< DenseIndex, NumDims > &other)
Definition: TensorDimensions.h:224
EIGEN_DEVICE_FUNC DSizes(const Sizes< Indices... > &a)
Definition: TensorDimensions.h:211
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE DenseIndex TotalSize() const
Definition: TensorDimensions.h:167
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE DSizes(DenseIndex firstDimension, DenseIndex secondDimension, IndexTypes... otherDimensions)
Definition: TensorDimensions.h:218
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Index rank() const
Definition: TensorDimensions.h:165
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE DenseIndex IndexOfColMajor(const array< DenseIndex, NumDims > &indices) const
Definition: TensorDimensions.h:230
array< DenseIndex, NumDims > Base
Definition: TensorDimensions.h:162
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE DenseIndex IndexOfRowMajor(const array< DenseIndex, NumDims > &indices) const
Definition: TensorDimensions.h:234
Definition: TensorDimensionList.h:29
Definition: TensorIndexList.h:271
Definition: TensorDimensions.h:85
static const std::ptrdiff_t total_size
Definition: TensorDimensions.h:88
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE std::ptrdiff_t operator[](const std::ptrdiff_t index) const
Definition: TensorDimensions.h:112
static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE std::ptrdiff_t TotalSize()
Definition: TensorDimensions.h:93
const Base t
Definition: TensorDimensions.h:87
EIGEN_DEVICE_FUNC Sizes()
Definition: TensorDimensions.h:95
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE ptrdiff_t IndexOfColMajor(const array< DenseIndex, Base::count > &indices) const
Definition: TensorDimensions.h:117
static const ptrdiff_t count
Definition: TensorDimensions.h:89
internal::numeric_list< std::ptrdiff_t, Indices... > Base
Definition: TensorDimensions.h:86
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE std::ptrdiff_t rank() const
Definition: TensorDimensions.h:91
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE ptrdiff_t IndexOfRowMajor(const array< DenseIndex, Base::count > &indices) const
Definition: TensorDimensions.h:122
Sizes & operator=(const T &)
Definition: TensorDimensions.h:107
EIGEN_DEVICE_FUNC Sizes(DenseIndex...)
Definition: TensorDimensions.h:101
EIGEN_DEVICE_FUNC Sizes(std::initializer_list< std::ptrdiff_t >)
Definition: TensorDimensions.h:102
EIGEN_DEVICE_FUNC Sizes(const array< DenseIndex, Base::count > &)
Definition: TensorDimensions.h:97
static constexpr Index value
Definition: Meta.h:306
Definition: TensorDimensions.h:38
static const std::ptrdiff_t value
Definition: TensorDimensions.h:39
static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Index run(array< Index, NumIndices > const &, const Dimensions &)
Definition: TensorDimensions.h:58
Definition: TensorDimensions.h:43
static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Index run(array< Index, NumIndices > const &indices, const Dimensions &dimensions)
Definition: TensorDimensions.h:45
Definition: MoreMeta.h:202
Definition: MoreMeta.h:33
constexpr static std::size_t count
Definition: MoreMeta.h:34
static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE bool run(Dims1 &, Dims2 &)
Definition: TensorDimensions.h:316
static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE bool run(Dims1 &dims1, Dims2 &dims2)
Definition: TensorDimensions.h:309
Definition: TensorDimensions.h:304
static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE bool run(Dims1 &, Dims2 &)
Definition: TensorDimensions.h:305
static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Index run(array< Index, NumIndices > const &indices, array< Index, NumIndices > const &)
Definition: TensorDimensions.h:152
Definition: TensorDimensions.h:138
static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Index run(array< Index, NumIndices > const &indices, array< Index, NumIndices > const &dimensions)
Definition: TensorDimensions.h:139
static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Index run(array< Index, NumIndices > const &indices, std::vector< DenseIndex > const &)
Definition: TensorDimensions.h:268
Definition: TensorDimensions.h:254
static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Index run(array< Index, NumIndices > const &indices, std::vector< DenseIndex > const &dimensions)
Definition: TensorDimensions.h:255