Go to the documentation of this file.
12 #ifndef EIGEN_MATRIXSTORAGE_H
13 #define EIGEN_MATRIXSTORAGE_H
15 #ifdef EIGEN_DENSE_STORAGE_CTOR_PLUGIN
16 #define EIGEN_INTERNAL_DENSE_STORAGE_CTOR_PLUGIN(X) X; EIGEN_DENSE_STORAGE_CTOR_PLUGIN;
18 #define EIGEN_INTERNAL_DENSE_STORAGE_CTOR_PLUGIN(X)
27 template<
typename T,
int Size>
32 #if EIGEN_STACK_ALLOCATION_LIMIT
41 template <
typename T,
int Size,
int MatrixOrArrayOptions,
42 int Alignment = (MatrixOrArrayOptions&
DontAlign) ? 0
51 check_static_allocation_size<T,Size>();
57 check_static_allocation_size<T,Size>();
61 #if defined(EIGEN_DISABLE_UNALIGNED_ARRAY_ASSERT)
62 #define EIGEN_MAKE_UNALIGNED_ARRAY_ASSERT(sizemask)
63 #elif EIGEN_GNUC_AT_LEAST(4,7)
67 template<
typename PtrType>
69 #define EIGEN_MAKE_UNALIGNED_ARRAY_ASSERT(sizemask) \
70 eigen_assert((internal::UIntPtr(eigen_unaligned_array_assert_workaround_gcc47(array)) & (sizemask)) == 0 \
71 && "this assertion is explained here: " \
72 "http://eigen.tuxfamily.org/dox-devel/group__TopicUnalignedArrayAssert.html" \
73 " **** READ THIS WEB PAGE !!! ****");
75 #define EIGEN_MAKE_UNALIGNED_ARRAY_ASSERT(sizemask) \
76 eigen_assert((internal::UIntPtr(array) & (sizemask)) == 0 \
77 && "this assertion is explained here: " \
78 "http://eigen.tuxfamily.org/dox-devel/group__TopicUnalignedArrayAssert.html" \
79 " **** READ THIS WEB PAGE !!! ****");
82 template <
typename T,
int Size,
int MatrixOrArrayOptions>
85 EIGEN_ALIGN_TO_BOUNDARY(8)
T array[Size];
91 check_static_allocation_size<T,Size>();
97 check_static_allocation_size<T,Size>();
101 template <
typename T,
int Size,
int MatrixOrArrayOptions>
104 EIGEN_ALIGN_TO_BOUNDARY(16)
T array[Size];
110 check_static_allocation_size<T,Size>();
116 check_static_allocation_size<T,Size>();
120 template <
typename T,
int Size,
int MatrixOrArrayOptions>
123 EIGEN_ALIGN_TO_BOUNDARY(32)
T array[Size];
129 check_static_allocation_size<T,Size>();
135 check_static_allocation_size<T,Size>();
139 template <
typename T,
int Size,
int MatrixOrArrayOptions>
142 EIGEN_ALIGN_TO_BOUNDARY(64)
T array[Size];
148 check_static_allocation_size<T,Size>();
154 check_static_allocation_size<T,Size>();
158 template <
typename T,
int MatrixOrArrayOptions,
int Alignment>
167 template<
typename T,
int Size,
int MatrixOrArrayOptions,
int Alignment>
174 template<
typename T,
int Size,
int MatrixOrArrayOptions,
int Alignment>
178 if (a_size < b_size) {
179 std::swap_ranges(
b.array,
b.array + a_size,
a.array);
180 smart_move(
b.array + a_size,
b.array + b_size,
a.array + a_size);
181 }
else if (a_size > b_size) {
182 std::swap_ranges(
a.array,
a.array + b_size,
b.array);
183 smart_move(
a.array + b_size,
a.array + a_size,
b.array + b_size);
185 std::swap_ranges(
a.array,
a.array + a_size,
b.array);
204 template<
typename T,
int Size,
int _Rows,
int _Cols,
int _Options>
class DenseStorage;
207 template<
typename T,
int Size,
int _Rows,
int _Cols,
int _Options>
class DenseStorage
216 : m_data(
internal::constructor_without_unaligned_array_assert()) {}
217 #if !EIGEN_HAS_CXX11 || defined(EIGEN_DENSE_STORAGE_CTOR_PLUGIN)
235 #if EIGEN_HAS_RVALUE_REFERENCES
238 : m_data(std::move(
other.m_data))
244 m_data = std::move(
other.m_data);
307 : m_data(
internal::constructor_without_unaligned_array_assert()), m_rows(0), m_cols(0) {}
309 : m_data(
internal::constructor_without_unaligned_array_assert()), m_rows(
other.m_rows), m_cols(
other.m_cols)
317 m_rows =
other.m_rows;
318 m_cols =
other.m_cols;
346 : m_data(
internal::constructor_without_unaligned_array_assert()), m_rows(0) {}
348 : m_data(
internal::constructor_without_unaligned_array_assert()), m_rows(
other.m_rows)
357 m_rows =
other.m_rows;
384 : m_data(
internal::constructor_without_unaligned_array_assert()), m_cols(0) {}
386 : m_data(
internal::constructor_without_unaligned_array_assert()), m_cols(
other.m_cols)
394 m_cols =
other.m_cols;
421 : m_data(0), m_rows(0), m_cols(0) {}
430 , m_rows(
other.m_rows)
431 , m_cols(
other.m_cols)
445 #if EIGEN_HAS_RVALUE_REFERENCES
448 : m_data(std::move(
other.m_data))
449 , m_rows(std::move(
other.m_rows))
450 , m_cols(std::move(
other.m_cols))
452 other.m_data =
nullptr;
476 m_data = internal::conditional_aligned_realloc_new_auto<T,(_Options&DontAlign)==0>(m_data,
size, m_rows*m_cols);
482 if(
size != m_rows*m_cols)
484 internal::conditional_aligned_delete_auto<T,(_Options&DontAlign)==0>(m_data, m_rows*m_cols);
486 m_data = internal::conditional_aligned_new_auto<T,(_Options&DontAlign)==0>(
size);
514 , m_cols(
other.m_cols)
528 #if EIGEN_HAS_RVALUE_REFERENCES
531 : m_data(std::move(
other.m_data))
532 , m_cols(std::move(
other.m_cols))
534 other.m_data =
nullptr;
554 m_data = internal::conditional_aligned_realloc_new_auto<T,(_Options&DontAlign)==0>(m_data,
size, _Rows*m_cols);
559 if(
size != _Rows*m_cols)
561 internal::conditional_aligned_delete_auto<T,(_Options&DontAlign)==0>(m_data, _Rows*m_cols);
563 m_data = internal::conditional_aligned_new_auto<T,(_Options&DontAlign)==0>(
size);
590 , m_rows(
other.m_rows)
604 #if EIGEN_HAS_RVALUE_REFERENCES
607 : m_data(std::move(
other.m_data))
608 , m_rows(std::move(
other.m_rows))
610 other.m_data =
nullptr;
630 m_data = internal::conditional_aligned_realloc_new_auto<T,(_Options&DontAlign)==0>(m_data,
size, m_rows*_Cols);
635 if(
size != m_rows*_Cols)
637 internal::conditional_aligned_delete_auto<T,(_Options&DontAlign)==0>(m_data, _Cols*m_rows);
639 m_data = internal::conditional_aligned_new_auto<T,(_Options&DontAlign)==0>(
size);
652 #endif // EIGEN_MATRIX_H
internal::plain_array< T, Size, _Options > m_data
EIGEN_DEVICE_FUNC DenseStorage(Index size, Index rows, Index cols)
EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR Index rows(void) const EIGEN_NOEXCEPT
#define EIGEN_DEVICE_FUNC
Namespace containing all symbols from the Eigen library.
EIGEN_DEVICE_FUNC DenseStorage & operator=(const DenseStorage &)
EIGEN_DEVICE_FUNC T * data()
EIGEN_DEVICE_FUNC DenseStorage(internal::constructor_without_unaligned_array_assert)
EIGEN_DEVICE_FUNC plain_array()
EIGEN_DEVICE_FUNC Index rows(void) const EIGEN_NOEXCEPT
const EIGEN_DEVICE_FUNC T * data() const
EIGEN_DEVICE_FUNC DenseStorage(Index, Index rows, Index)
const EIGEN_DEVICE_FUNC T * data() const
EIGEN_DEVICE_FUNC DenseStorage(const DenseStorage &other)
EIGEN_DEVICE_FUNC T * data()
EIGEN_DEVICE_FUNC ~DenseStorage()
EIGEN_DEVICE_FUNC DenseStorage(const DenseStorage &other)
const EIGEN_DEVICE_FUNC T * data() const
EIGEN_DEVICE_FUNC DenseStorage(const DenseStorage &other)
EIGEN_DEVICE_FUNC void swap(DenseStorage &other)
EIGEN_DEVICE_FUNC T * smart_move(T *start, T *end, T *target)
#define EIGEN_INTERNAL_DENSE_STORAGE_CTOR_PLUGIN(X)
EIGEN_DEVICE_FUNC DenseStorage(Index, Index rows, Index cols)
const EIGEN_DEVICE_FUNC T * data() const
Eigen::Triplet< double > T
EIGEN_DEVICE_FUNC plain_array()
EIGEN_DEVICE_FUNC T * data()
void conservativeResize(Index size, Index rows, Index)
EIGEN_DEVICE_FUNC void swap(DenseStorage &other)
EIGEN_DEVICE_FUNC DenseStorage()
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void resize(Index size, Index rows, Index)
EIGEN_DEVICE_FUNC DenseStorage & operator=(const DenseStorage &other)
EIGEN_DEVICE_FUNC T * data()
const EIGEN_DEVICE_FUNC T * data() const
internal::plain_array< T, Size, _Options > m_data
#define eigen_internal_assert(x)
EIGEN_DEVICE_FUNC Index rows(void) const EIGEN_NOEXCEPT
EIGEN_DEVICE_FUNC DenseStorage(internal::constructor_without_unaligned_array_assert)
EIGEN_DEVICE_FUNC T * data()
static EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR Index cols(void)
EIGEN_DEVICE_FUNC void resize(Index, Index, Index)
EIGEN_DEVICE_FUNC plain_array()
EIGEN_DEVICE_FUNC DenseStorage()
EIGEN_DEVICE_FUNC DenseStorage()
EIGEN_DEVICE_FUNC void swap(DenseStorage &)
EIGEN_DEVICE_FUNC DenseStorage(internal::constructor_without_unaligned_array_assert)
#define EIGEN_UNUSED_VARIABLE(var)
EIGEN_DEVICE_FUNC DenseStorage & operator=(const DenseStorage &other)
EIGEN_DEVICE_FUNC void swap(DenseStorage &other)
const EIGEN_DEVICE_FUNC T * data() const
#define EIGEN_STACK_ALLOCATION_LIMIT
EIGEN_DEVICE_FUNC ~DenseStorage()
EIGEN_DEVICE_FUNC plain_array()
EIGEN_DEVICE_FUNC Index cols(void) const EIGEN_NOEXCEPT
internal::plain_array< T, Size, _Options > m_data
#define EIGEN_STRONG_INLINE
EIGEN_DEVICE_FUNC DenseStorage(internal::constructor_without_unaligned_array_assert)
EIGEN_DEVICE_FUNC DenseStorage(Index size, Index rows, Index cols)
EIGEN_DEVICE_FUNC DenseStorage(internal::constructor_without_unaligned_array_assert)
EIGEN_DEVICE_FUNC Index cols() const
EIGEN_DEVICE_FUNC DenseStorage(const DenseStorage &other)
EIGEN_DEVICE_FUNC plain_array()
EIGEN_DEVICE_FUNC void conservativeResize(Index, Index rows, Index)
#define EIGEN_ALWAYS_INLINE
A small structure to hold a non zero as a triplet (i,j,value).
static EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR Index rows(void) EIGEN_NOEXCEPT
EIGEN_DEVICE_FUNC void swap(DenseStorage &other)
EIGEN_DEVICE_FUNC plain_array(constructor_without_unaligned_array_assert)
EIGEN_DEVICE_FUNC void conservativeResize(Index, Index, Index)
EIGEN_DEVICE_FUNC DenseStorage(const DenseStorage &)
EIGEN_DEVICE_FUNC void swap(DenseStorage &other)
EIGEN_DEVICE_FUNC void resize(Index, Index, Index cols)
EIGEN_DEVICE_FUNC DenseStorage(const DenseStorage &other)
EIGEN_DEVICE_FUNC DenseStorage()
EIGEN_DEVICE_FUNC T * data()
EIGEN_DEVICE_FUNC DenseStorage & operator=(const DenseStorage &other)
EIGEN_DEVICE_FUNC void resize(Index size, Index rows, Index cols)
EIGEN_DEVICE_FUNC plain_array(constructor_without_unaligned_array_assert)
EIGEN_DEVICE_FUNC DenseStorage(Index size, Index rows, Index cols)
EIGEN_DEVICE_FUNC void swap(DenseStorage &other)
EIGEN_DEVICE_FUNC plain_array(constructor_without_unaligned_array_assert)
EIGEN_DEVICE_FUNC DenseStorage & operator=(const DenseStorage &other)
EIGEN_DEVICE_FUNC DenseStorage & operator=(const DenseStorage &other)
EIGEN_DEVICE_FUNC void check_static_allocation_size()
EIGEN_DEVICE_FUNC DenseStorage()
static EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR Index cols(void) EIGEN_NOEXCEPT
EIGEN_DEVICE_FUNC DenseStorage(const DenseStorage &other)
EIGEN_DEVICE_FUNC void resize(Index, Index rows, Index)
#define EIGEN_STATIC_ASSERT(CONDITION, MSG)
EIGEN_DEVICE_FUNC Index cols(void) const EIGEN_NOEXCEPT
EIGEN_STRONG_INLINE void swap(T &a, T &b)
EIGEN_DEVICE_FUNC plain_array(constructor_without_unaligned_array_assert)
EIGEN_DEVICE_FUNC DenseStorage & operator=(const DenseStorage &other)
EIGEN_DEVICE_FUNC Index cols(void) const EIGEN_NOEXCEPT
static EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR Index rows(void) EIGEN_NOEXCEPT
EIGEN_DEVICE_FUNC void conservativeResize(Index, Index rows, Index cols)
DenseStorage(internal::constructor_without_unaligned_array_assert)
EIGEN_DEVICE_FUNC void conservativeResize(Index, Index, Index cols)
EIGEN_DEVICE_FUNC DenseStorage(Index, Index, Index)
EIGEN_DEVICE_FUNC DenseStorage(internal::constructor_without_unaligned_array_assert)
const EIGEN_DEVICE_FUNC T * data() const
const EIGEN_DEVICE_FUNC T * data() const
EIGEN_DEVICE_FUNC Index rows() const
static EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR Index cols(void) EIGEN_NOEXCEPT
EIGEN_DEVICE_FUNC static EIGEN_STRONG_INLINE void swap(plain_array< T, Size, MatrixOrArrayOptions, Alignment > &a, const Eigen::Index a_size, plain_array< T, Size, MatrixOrArrayOptions, Alignment > &b, const Eigen::Index b_size)
EIGEN_DEVICE_FUNC plain_array(constructor_without_unaligned_array_assert)
EIGEN_DEVICE_FUNC void resize(Index, Index rows, Index cols)
EIGEN_DEVICE_FUNC DenseStorage(const DenseStorage &other)
EIGEN_DEVICE_FUNC DenseStorage()
EIGEN_DEVICE_FUNC DenseStorage(Index, Index, Index cols)
EIGEN_DEVICE_FUNC DenseStorage()
EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR Index cols(void) const EIGEN_NOEXCEPT
EIGEN_DEVICE_FUNC static EIGEN_STRONG_INLINE void copy(const plain_array< T, Size, MatrixOrArrayOptions, Alignment > &src, const Eigen::Index size, plain_array< T, Size, MatrixOrArrayOptions, Alignment > &dst)
EIGEN_DEVICE_FUNC void smart_copy(const T *start, const T *end, T *target)
EIGEN_DEVICE_FUNC T * data()
static EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR Index rows(void) EIGEN_NOEXCEPT
EIGEN_DEVICE_FUNC void swap(DenseStorage &other)
EIGEN_DEVICE_FUNC ~DenseStorage()
EIGEN_CONSTEXPR Index size(const T &x)
void conservativeResize(Index size, Index rows, Index cols)
EIGEN_DEVICE_FUNC DenseStorage & operator=(const DenseStorage &other)
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void resize(Index size, Index, Index cols)
EIGEN_DEVICE_FUNC T * data()
EIGEN_DEVICE_FUNC void conservativeResize(Index size, Index, Index cols)
int EIGEN_BLAS_FUNC() swap(int *n, RealScalar *px, int *incx, RealScalar *py, int *incy)
EIGEN_DEVICE_FUNC Index rows(void) const EIGEN_NOEXCEPT
EIGEN_DEVICE_FUNC plain_array(constructor_without_unaligned_array_assert)
internal::plain_array< T, Size, _Options > m_data
#define EIGEN_MAKE_UNALIGNED_ARRAY_ASSERT(sizemask)
EIGEN_DEVICE_FUNC DenseStorage(Index size, Index rows, Index cols)
EIGEN_DEVICE_FUNC void resize(Index, Index, Index)
EIGEN_DEVICE_FUNC plain_array()
EIGEN_DEVICE_FUNC DenseStorage()
EIGEN_DEFAULT_DENSE_INDEX_TYPE Index
The Index type as used for the API.
EIGEN_DEVICE_FUNC T * conditional_aligned_new_auto(std::size_t size)
DenseStorage(internal::constructor_without_unaligned_array_assert)
EIGEN_DEVICE_FUNC void conservativeResize(Index, Index, Index)
gtsam
Author(s):
autogenerated on Sat Nov 16 2024 04:02:12