TR-mbed 1.0
Loading...
Searching...
No Matches
TensorStorage.h
Go to the documentation of this file.
1// This file is part of Eigen, a lightweight C++ template library
2// for linear algebra.
3//
4// Copyright (C) 2013 Christian Seiler <christian@iwakd.de>
5// Copyright (C) 2014-2015 Benoit Steiner <benoit.steiner.goog@gmail.com>
6//
7// This Source Code Form is subject to the terms of the Mozilla
8// Public License v. 2.0. If a copy of the MPL was not distributed
9// with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
10
11#ifndef EIGEN_CXX11_TENSOR_TENSORSTORAGE_H
12#define EIGEN_CXX11_TENSOR_TENSORSTORAGE_H
13
14#ifdef EIGEN_TENSOR_STORAGE_CTOR_PLUGIN
15 #define EIGEN_INTERNAL_TENSOR_STORAGE_CTOR_PLUGIN EIGEN_TENSOR_STORAGE_CTOR_PLUGIN;
16#else
17 #define EIGEN_INTERNAL_TENSOR_STORAGE_CTOR_PLUGIN
18#endif
19
20namespace Eigen {
21
34template<typename T, typename Dimensions, int Options> class TensorStorage;
35
36
37// Pure fixed-size storage
38template<typename T, typename FixedDimensions, int Options_>
40{
41 private:
42 static const std::size_t Size = FixedDimensions::total_size;
43
44 // Allocate an array of size at least one to prevent compiler warnings.
45 static const std::size_t MinSize = max_n_1<Size>::size;
46 EIGEN_ALIGN_MAX T m_data[MinSize];
47
48 public:
52
54 EIGEN_STRONG_INLINE T *data() { return m_data; }
56 EIGEN_STRONG_INLINE const T *data() const { return m_data; }
57
59 EIGEN_STRONG_INLINE const FixedDimensions& dimensions()
60 {
61 static const FixedDimensions* singleton_dimensions = new FixedDimensions();
62 return *singleton_dimensions;
63 }
64
66 EIGEN_STRONG_INLINE DenseIndex size() const { return Size; }
67};
68
69// pure dynamic
70template<typename T, typename IndexType, int NumIndices_, int Options_>
71class TensorStorage<T, DSizes<IndexType, NumIndices_>, Options_>
72{
73 public:
74 typedef IndexType Index;
77
78 EIGEN_DEVICE_FUNC TensorStorage() : m_data(0), m_dimensions() {
79 if (NumIndices_ == 0) {
81 }
82 }
84 : m_data(0), m_dimensions(internal::template repeat<NumIndices_, Index>(0)) {}
86 : m_data(internal::conditional_aligned_new_auto<T,(Options_&DontAlign)==0>(size)), m_dimensions(dimensions)
88
89#if EIGEN_HAS_VARIADIC_TEMPLATES
90 template <typename... DenseIndex>
91 EIGEN_DEVICE_FUNC TensorStorage(DenseIndex... indices) : m_dimensions(indices...) {
93 }
94#endif
95
97 : m_data(internal::conditional_aligned_new_auto<T,(Options_&DontAlign)==0>(internal::array_prod(other.m_dimensions)))
98 , m_dimensions(other.m_dimensions)
99 {
100 internal::smart_copy(other.m_data, other.m_data+internal::array_prod(other.m_dimensions), m_data);
101 }
103 {
104 if (this != &other) {
105 Self tmp(other);
106 this->swap(tmp);
107 }
108 return *this;
109 }
110
111#if EIGEN_HAS_RVALUE_REFERENCES
113 {
114 *this = std::move(other);
115 }
116
117 EIGEN_DEVICE_FUNC Self& operator=(Self&& other)
118 {
119 numext::swap(m_data, other.m_data);
120 numext::swap(m_dimensions, other.m_dimensions);
121 return *this;
122 }
123#endif
124
127 { numext::swap(m_data,other.m_data); numext::swap(m_dimensions,other.m_dimensions); }
128
129 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const Dimensions& dimensions() const {return m_dimensions;}
130
132 {
133 const Index currentSz = internal::array_prod(m_dimensions);
134 if(size != currentSz)
135 {
137 if (size)
139 else if (NumIndices_ == 0) {
141 }
142 else
143 m_data = 0;
145 }
146 m_dimensions = nbDimensions;
147 }
148
150 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const T *data() const { return m_data; }
151
152 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Index size() const { return m_dimensions.TotalSize(); }
153
154 private:
155 T *m_data;
156 Dimensions m_dimensions;
157};
158
159} // end namespace Eigen
160
161#endif // EIGEN_CXX11_TENSOR_TENSORSTORAGE_H
#define EIGEN_ALIGN_MAX
Definition ConfigureVectorization.h:157
#define EIGEN_INTERNAL_DENSE_STORAGE_CTOR_PLUGIN(X)
Definition DenseStorage.h:18
#define EIGEN_DEVICE_FUNC
Definition Macros.h:976
#define EIGEN_STRONG_INLINE
Definition Macros.h:917
#define EIGEN_INTERNAL_TENSOR_STORAGE_CTOR_PLUGIN
Definition TensorStorage.h:17
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE T * data()
Definition TensorStorage.h:149
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const Dimensions & dimensions() const
Definition TensorStorage.h:129
EIGEN_DEVICE_FUNC ~TensorStorage()
Definition TensorStorage.h:125
EIGEN_DEVICE_FUNC TensorStorage(internal::constructor_without_unaligned_array_assert)
Definition TensorStorage.h:83
EIGEN_DEVICE_FUNC TensorStorage()
Definition TensorStorage.h:78
EIGEN_DEVICE_FUNC void swap(Self &other)
Definition TensorStorage.h:126
DSizes< IndexType, NumIndices_ > Dimensions
Definition TensorStorage.h:75
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Index size() const
Definition TensorStorage.h:152
TensorStorage< T, DSizes< IndexType, NumIndices_ >, Options_ > Self
Definition TensorStorage.h:76
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const T * data() const
Definition TensorStorage.h:150
EIGEN_DEVICE_FUNC Self & operator=(const Self &other)
Definition TensorStorage.h:102
EIGEN_DEVICE_FUNC void resize(Index size, const array< Index, NumIndices_ > &nbDimensions)
Definition TensorStorage.h:131
EIGEN_DEVICE_FUNC TensorStorage(const Self &other)
Definition TensorStorage.h:96
EIGEN_DEVICE_FUNC TensorStorage(Index size, const array< Index, NumIndices_ > &dimensions)
Definition TensorStorage.h:85
Definition TensorStorage.h:40
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE T * data()
Definition TensorStorage.h:54
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE DenseIndex size() const
Definition TensorStorage.h:66
static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const FixedDimensions & dimensions()
Definition TensorStorage.h:59
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const T * data() const
Definition TensorStorage.h:56
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE TensorStorage()
Definition TensorStorage.h:50
Definition EmulateArray.h:21
@ DontAlign
Definition Constants.h:325
int EIGEN_BLAS_FUNC() swap(int *n, RealScalar *px, int *incx, RealScalar *py, int *incy)
Definition level1_impl.h:130
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE std::ptrdiff_t array_prod(const Sizes< Indices... > &)
Definition TensorDimensions.h:140
EIGEN_DEVICE_FUNC void smart_copy(const T *start, const T *end, T *target)
Definition Memory.h:515
EIGEN_STRONG_INLINE void swap(T &a, T &b)
Definition Meta.h:766
Namespace containing all symbols from the Eigen library.
Definition bench_norm.cpp:85
EIGEN_DEFAULT_DENSE_INDEX_TYPE DenseIndex
Definition Meta.h:66
Definition BandTriangularSolver.h:13
Definition TensorDimensions.h:263
Definition ForwardDeclarations.h:17
Definition TensorMeta.h:40