10#ifndef EIGEN_CXX11_TENSOR_TENSOR_DIMENSIONS_H
11#define EIGEN_CXX11_TENSOR_TENSOR_DIMENSIONS_H
35template<std::ptrdiff_t n,
typename Dimension>
struct dget {
40template<
typename Index, std::ptrdiff_t NumIndices, std::ptrdiff_t n,
bool RowMajor>
45 const Dimensions& dimensions)
53template<
typename Index, std::ptrdiff_t NumIndices,
bool RowMajor>
63template<
typename Index, std::ptrdiff_t n>
68 const Dimensions& dimensions)
76template<
typename Index>
91#ifndef EIGEN_EMULATE_CXX11_META_H
92template <
typename std::ptrdiff_t... Indices>
97 static const ptrdiff_t
count = Base::count;
108 template <
typename DenseIndex>
112#if EIGEN_HAS_VARIADIC_TEMPLATES
139template <
typename std::ptrdiff_t... Indices>
141 return Sizes<Indices...>::total_size;
147template <std::ptrdiff_t n>
148struct non_zero_size {
149 typedef internal::type2val<std::ptrdiff_t, n> type;
152struct non_zero_size<0> {
153 typedef internal::null_type type;
156template <std::ptrdiff_t V1=0, std::ptrdiff_t V2=0, std::ptrdiff_t V3=0, std::ptrdiff_t V4=0, std::ptrdiff_t V5=0>
struct Sizes {
157 typedef typename internal::make_type_list<typename non_zero_size<V1>::type,
typename non_zero_size<V2>::type,
typename non_zero_size<V3>::type,
typename non_zero_size<V4>::type,
typename non_zero_size<V5>::type >::type
Base;
158 static const std::ptrdiff_t
count = Base::count;
159 static const std::ptrdiff_t
total_size = internal::arg_prod<Base>::value;
166 return internal::arg_prod<Base>::value;
170 template <
typename DenseIndex>
171 explicit Sizes(
const array<DenseIndex, Base::count>& ) {
179#if EIGEN_HAS_VARIADIC_TEMPLATES
181 explicit Sizes(std::initializer_list<std::ptrdiff_t>) {
200 return internal::get<0, Base>::value;
202 return internal::get<1, Base>::value;
204 return internal::get<2, Base>::value;
206 return internal::get<3, Base>::value;
208 return internal::get<4, Base>::value;
211 return static_cast<Index>(-1);
216 ptrdiff_t
IndexOfColMajor(
const array<DenseIndex, Base::count>& indices)
const {
220 ptrdiff_t
IndexOfRowMajor(
const array<DenseIndex, Base::count>& indices)
const {
226template <std::ptrdiff_t V1, std::ptrdiff_t V2, std::ptrdiff_t V3, std::ptrdiff_t V4, std::ptrdiff_t V5>
236template<
typename Index, std::ptrdiff_t NumIndices, std::ptrdiff_t n,
bool RowMajor>
248template<
typename Index, std::ptrdiff_t NumIndices,
bool RowMajor>
262template <
typename DenseIndex,
int NumDims>
276 for (
int i = 0 ;
i < NumDims; ++
i) {
288 for (
int i = 0 ;
i < NumDims; ++
i) {
295 template<
typename OtherIndex>
306 >::value,
void*>::type = 0) {
307 for (
int i = 0;
i < NumDims; ++
i) {
312#ifdef EIGEN_HAS_INDEX_LIST
313 template <
typename FirstType,
typename... OtherTypes>
315 explicit DSizes(
const Eigen::IndexList<FirstType, OtherTypes...>& dimensions) {
316 for (
int i = 0;
i < dimensions.count; ++
i) {
317 (*this)[
i] = dimensions[
i];
322#ifndef EIGEN_EMULATE_CXX11_META_H
323 template <
typename std::ptrdiff_t... Indices>
325 for (
int i = 0 ;
i < NumDims; ++
i) {
330 template <std::ptrdiff_t V1, std::ptrdiff_t V2, std::ptrdiff_t V3, std::ptrdiff_t V4, std::ptrdiff_t V5>
332 for (
int i = 0 ;
i < NumDims; ++
i) {
338#if EIGEN_HAS_VARIADIC_TEMPLATES
341 EIGEN_STATIC_ASSERT(
sizeof...(otherDimensions) + 2 == NumDims, YOU_MADE_A_PROGRAMMING_MISTAKE)
373 *
static_cast<Base*
>(
this) = other;
386template <
typename IndexType,
int NumDims>
390 for (
int i = 0;
i < NumDims; ++
i) {
391 if (
i > 0) os <<
", ";
400template<
typename Index, std::ptrdiff_t NumIndices, std::ptrdiff_t n,
bool RowMajor>
412template<
typename Index, std::ptrdiff_t NumIndices,
bool RowMajor>
432#ifndef EIGEN_EMULATE_CXX11_META_H
447template <std::ptrdiff_t V1, std::ptrdiff_t V2, std::ptrdiff_t V3, std::ptrdiff_t V4, std::ptrdiff_t V5>
struct array_size<const
Sizes<V1,V2,V3,V4,V5> > {
450template <std::ptrdiff_t V1, std::ptrdiff_t V2, std::ptrdiff_t V3, std::ptrdiff_t V4, std::ptrdiff_t V5>
struct array_size<Sizes<V1,V2,V3,V4,V5> > {
454 return get<n, typename Sizes<V1,V2,V3,V4,V5>::Base>::value;
460template <
typename Dims1,
typename Dims2, ptrdiff_t n, ptrdiff_t m>
466template <
typename Dims1,
typename Dims2, ptrdiff_t n>
473template <
typename Dims1,
typename Dims2>
483template <
typename Dims1,
typename Dims2>
ArrayXXi a
Definition Array_initializer_list_23_cxx11.cpp:1
int n
Definition BiCGSTAB_simple.cpp:1
int i
Definition BiCGSTAB_step_by_step.cpp:9
#define EIGEN_ALWAYS_INLINE
Definition Macros.h:932
#define EIGEN_DEVICE_FUNC
Definition Macros.h:976
#define eigen_assert(x)
Definition Macros.h:1037
#define EIGEN_STRONG_INLINE
Definition Macros.h:917
#define EIGEN_STATIC_ASSERT(CONDITION, MSG)
Definition StaticAssert.h:127
Definition EmulateArray.h:21
@ RowMajor
Definition Constants.h:321
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE std::ptrdiff_t array_prod(const Sizes< Indices... > &)
Definition TensorDimensions.h:140
EIGEN_DEVICE_FUNC constexpr EIGEN_STRONG_INLINE decltype(reduce< product_op, Ts... >::run((*((Ts *) 0))...) arg_prod)(Ts... ts)
Definition CXX11Meta.h:324
const Index array_get(DimensionList< Index, Rank > &)
Definition TensorDimensionList.h:39
Namespace containing all symbols from the Eigen library.
Definition bench_norm.cpp:85
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE bool dimensions_match(Dims1 dims1, Dims2 dims2)
Definition TensorDimensions.h:484
EIGEN_DEFAULT_DENSE_INDEX_TYPE Index
The Index type as used for the API.
Definition Meta.h:74
EIGEN_DEFAULT_DENSE_INDEX_TYPE DenseIndex
Definition Meta.h:66
std::ostream & operator<<(std::ostream &os, const DSizes< IndexType, NumDims > &dims)
Definition TensorDimensions.h:387
Definition BandTriangularSolver.h:13
uint8_t count
Definition ref_serial.h:256
Definition TensorDimensions.h:263
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE DSizes()
Definition TensorDimensions.h:275
EIGEN_DEVICE_FUNC DSizes(const array< OtherIndex, NumDims > &other, typename internal::enable_if< internal::is_same< DenseIndex, typename internal::promote_index_type< DenseIndex, OtherIndex >::type >::value, void * >::type=0)
Definition TensorDimensions.h:297
EIGEN_DEVICE_FUNC DSizes & operator=(const array< DenseIndex, NumDims > &other)
Definition TensorDimensions.h:372
EIGEN_DEVICE_FUNC DSizes(const DenseIndex i0, const DenseIndex i1, const DenseIndex i2, const DenseIndex i3)
Definition TensorDimensions.h:355
EIGEN_DEVICE_FUNC DSizes(const array< DenseIndex, NumDims > &a)
Definition TensorDimensions.h:280
EIGEN_DEVICE_FUNC DSizes(const DenseIndex i0, const DenseIndex i1)
Definition TensorDimensions.h:344
EIGEN_DEVICE_FUNC DSizes(const DimensionList< DenseIndex, NumDims > &a)
Definition TensorDimensions.h:287
EIGEN_DEVICE_FUNC DSizes(const DenseIndex i0)
Definition TensorDimensions.h:282
static const int count
Definition TensorDimensions.h:265
EIGEN_DEVICE_FUNC DSizes(const DenseIndex i0, const DenseIndex i1, const DenseIndex i2, const DenseIndex i3, const DenseIndex i4)
Definition TensorDimensions.h:362
EIGEN_DEVICE_FUNC DSizes(const Sizes< Indices... > &a)
Definition TensorDimensions.h:324
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE DenseIndex TotalSize() const
Definition TensorDimensions.h:271
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Index rank() const
Definition TensorDimensions.h:267
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE DenseIndex IndexOfColMajor(const array< DenseIndex, NumDims > &indices) const
Definition TensorDimensions.h:378
array< DenseIndex, NumDims > Base
Definition TensorDimensions.h:264
EIGEN_DEVICE_FUNC DSizes(const DenseIndex i0, const DenseIndex i1, const DenseIndex i2)
Definition TensorDimensions.h:349
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE DenseIndex IndexOfRowMajor(const array< DenseIndex, NumDims > &indices) const
Definition TensorDimensions.h:381
Definition TensorDimensionList.h:25
Definition TensorDimensions.h:93
static const std::ptrdiff_t total_size
Definition TensorDimensions.h:96
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE std::ptrdiff_t operator[](const std::ptrdiff_t index) const
Definition TensorDimensions.h:124
static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE std::ptrdiff_t TotalSize()
Definition TensorDimensions.h:103
const Base t
Definition TensorDimensions.h:95
EIGEN_DEVICE_FUNC Sizes()
Definition TensorDimensions.h:107
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE ptrdiff_t IndexOfColMajor(const array< DenseIndex, Base::count > &indices) const
Definition TensorDimensions.h:129
static const ptrdiff_t count
Definition TensorDimensions.h:97
internal::numeric_list< std::ptrdiff_t, Indices... > Base
Definition TensorDimensions.h:94
Sizes & operator=(const T &)
Definition TensorDimensions.h:119
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE std::ptrdiff_t rank() const
Definition TensorDimensions.h:99
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE ptrdiff_t IndexOfRowMajor(const array< DenseIndex, Base::count > &indices) const
Definition TensorDimensions.h:133
EIGEN_DEVICE_FUNC Sizes(const array< DenseIndex, Base::count > &)
Definition TensorDimensions.h:109
@ value
Definition Meta.h:446
Definition TensorDimensions.h:35
static const std::ptrdiff_t value
Definition TensorDimensions.h:36
static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Index run(array< Index, NumIndices > const &, const Dimensions &)
Definition TensorDimensions.h:57
Definition TensorDimensions.h:42
static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Index run(array< Index, NumIndices > const &indices, const Dimensions &dimensions)
Definition TensorDimensions.h:44
Definition CXX11Meta.h:115
Definition CXX11Meta.h:35
static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE bool run(Dims1 &, Dims2 &)
Definition TensorDimensions.h:475
static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE bool run(Dims1 &dims1, Dims2 &dims2)
Definition TensorDimensions.h:468
Definition TensorDimensions.h:461
static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE bool run(Dims1 &, Dims2 &)
Definition TensorDimensions.h:462
static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Index run(array< Index, NumIndices > const &indices, array< Index, NumIndices > const &)
Definition TensorDimensions.h:252
Definition TensorDimensions.h:238
static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Index run(array< Index, NumIndices > const &indices, array< Index, NumIndices > const &dimensions)
Definition TensorDimensions.h:240
static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Index run(array< Index, NumIndices > const &indices, std::vector< DenseIndex > const &)
Definition TensorDimensions.h:416
Definition TensorDimensions.h:402
static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Index run(array< Index, NumIndices > const &indices, std::vector< DenseIndex > const &dimensions)
Definition TensorDimensions.h:404
Definition ForwardDeclarations.h:17