11 #ifndef EIGEN_CXX11_TENSOR_TENSORSTORAGE_H 12 #define EIGEN_CXX11_TENSOR_TENSORSTORAGE_H 14 #ifdef EIGEN_TENSOR_STORAGE_CTOR_PLUGIN 15 #define EIGEN_INTERNAL_TENSOR_STORAGE_CTOR_PLUGIN EIGEN_TENSOR_STORAGE_CTOR_PLUGIN; 17 #define EIGEN_INTERNAL_TENSOR_STORAGE_CTOR_PLUGIN 34 template<
typename T,
typename Dimensions,
int Options_>
class TensorStorage;
38 template<
typename T,
int Options_,
typename FixedDimensions>
42 static const std::size_t Size = FixedDimensions::total_size;
46 EIGEN_ALIGN_MAX
T m_data[MinSize];
48 FixedDimensions m_dimensions;
56 EIGEN_STRONG_INLINE
T *data() {
return m_data; }
58 EIGEN_STRONG_INLINE
const T *data()
const {
return m_data; }
61 EIGEN_STRONG_INLINE
const FixedDimensions& dimensions()
const {
return m_dimensions; }
64 EIGEN_STRONG_INLINE DenseIndex size()
const {
return m_dimensions.TotalSize(); }
69 template<
typename T,
int Options_,
typename IndexType,
int NumIndices_>
73 typedef IndexType
Index;
77 EIGEN_DEVICE_FUNC
TensorStorage() : m_data(0), m_dimensions() {
78 if (NumIndices_ == 0) {
79 m_data = internal::conditional_aligned_new_auto<T,(Options_&DontAlign)==0>(1);
83 : m_data(0), m_dimensions(internal::template repeat<NumIndices_, Index>(0)) {}
85 : m_data(internal::conditional_aligned_new_auto<
T,(Options_&
DontAlign)==0>(size)), m_dimensions(dimensions)
86 { EIGEN_INTERNAL_TENSOR_STORAGE_CTOR_PLUGIN }
88 #if EIGEN_HAS_VARIADIC_TEMPLATES 89 template <
typename... DenseIndex>
90 EIGEN_DEVICE_FUNC TensorStorage(DenseIndex... indices) : m_dimensions(indices...) {
91 m_data = internal::conditional_aligned_new_auto<T,(Options_&DontAlign)==0>(internal::array_prod(m_dimensions));
95 EIGEN_DEVICE_FUNC TensorStorage(
const Self& other)
96 : m_data(internal::conditional_aligned_new_auto<
T,(Options_&DontAlign)==0>(internal::array_prod(other.m_dimensions)))
97 , m_dimensions(other.m_dimensions)
99 internal::smart_copy(other.m_data, other.m_data+internal::array_prod(other.m_dimensions), m_data);
101 EIGEN_DEVICE_FUNC Self& operator=(
const Self& other)
103 if (
this != &other) {
110 EIGEN_DEVICE_FUNC ~TensorStorage() { internal::conditional_aligned_delete_auto<T,(Options_&DontAlign)==0>(m_data, internal::array_prod(m_dimensions)); }
111 EIGEN_DEVICE_FUNC
void swap(Self& other)
112 { numext::swap(m_data,other.m_data); numext::swap(m_dimensions,other.m_dimensions); }
114 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
const Dimensions& dimensions()
const {
return m_dimensions;}
118 const Index currentSz = internal::array_prod(m_dimensions);
119 if(size != currentSz)
121 internal::conditional_aligned_delete_auto<T,(Options_&DontAlign)==0>(m_data, currentSz);
123 m_data = internal::conditional_aligned_new_auto<T,(Options_&DontAlign)==0>(size);
124 else if (NumIndices_ == 0) {
125 m_data = internal::conditional_aligned_new_auto<T,(Options_&DontAlign)==0>(1);
129 EIGEN_INTERNAL_DENSE_STORAGE_CTOR_PLUGIN
131 m_dimensions = nbDimensions;
134 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
T *data() {
return m_data; }
135 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
const T *data()
const {
return m_data; }
137 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Index size()
const {
return m_dimensions.TotalSize(); }
141 Dimensions m_dimensions;
146 #endif // EIGEN_CXX11_TENSOR_TENSORSTORAGE_H Don't require alignment for the matrix itself (the array of coefficients, if dynamically allocated...
Definition: Constants.h:326
Definition: TensorDimensions.h:261
Namespace containing all symbols from the Eigen library.
Definition: bench_norm.cpp:85
Definition: TensorMeta.h:40
Definition: TensorStorage.h:70
EIGEN_DEFAULT_DENSE_INDEX_TYPE Index
The Index type as used for the API.
Definition: Meta.h:33
Definition: EmulateArray.h:21
Definition: TensorStorage.h:34
Definition: DenseStorage.h:25