WPILibC++ 2023.4.3-108-ge5452e3
DenseStorage.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) 2008 Gael Guennebaud <gael.guennebaud@inria.fr>
5// Copyright (C) 2006-2009 Benoit Jacob <jacob.benoit.1@gmail.com>
6// Copyright (C) 2010-2013 Hauke Heibel <hauke.heibel@gmail.com>
7//
8// This Source Code Form is subject to the terms of the Mozilla
9// Public License v. 2.0. If a copy of the MPL was not distributed
10// with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
11
12#ifndef EIGEN_MATRIXSTORAGE_H
13#define EIGEN_MATRIXSTORAGE_H
14
15#ifdef EIGEN_DENSE_STORAGE_CTOR_PLUGIN
16 #define EIGEN_INTERNAL_DENSE_STORAGE_CTOR_PLUGIN(X) X; EIGEN_DENSE_STORAGE_CTOR_PLUGIN;
17#else
18 #define EIGEN_INTERNAL_DENSE_STORAGE_CTOR_PLUGIN(X)
19#endif
20
21namespace Eigen {
22
23namespace internal {
24
26
27template<typename T, int Size>
30{
31 // if EIGEN_STACK_ALLOCATION_LIMIT is defined to 0, then no limit
32 #if EIGEN_STACK_ALLOCATION_LIMIT
33 EIGEN_STATIC_ASSERT(Size * sizeof(T) <= EIGEN_STACK_ALLOCATION_LIMIT, OBJECT_ALLOCATED_ON_STACK_IS_TOO_BIG);
34 #endif
35}
36
37/** \internal
38 * Static array. If the MatrixOrArrayOptions require auto-alignment, the array will be automatically aligned:
39 * to 16 bytes boundary if the total size is a multiple of 16 bytes.
40 */
41template <typename T, int Size, int MatrixOrArrayOptions,
42 int Alignment = (MatrixOrArrayOptions&DontAlign) ? 0
45{
46 T array[Size];
47
50 {
51 check_static_allocation_size<T,Size>();
52 }
53
56 {
57 check_static_allocation_size<T,Size>();
58 }
59};
60
61#if defined(EIGEN_DISABLE_UNALIGNED_ARRAY_ASSERT)
62 #define EIGEN_MAKE_UNALIGNED_ARRAY_ASSERT(sizemask)
63#elif EIGEN_GNUC_AT_LEAST(4,7)
64 // GCC 4.7 is too aggressive in its optimizations and remove the alignment test based on the fact the array is declared to be aligned.
65 // See this bug report: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53900
66 // Hiding the origin of the array pointer behind a function argument seems to do the trick even if the function is inlined:
67 template<typename PtrType>
68 EIGEN_ALWAYS_INLINE PtrType eigen_unaligned_array_assert_workaround_gcc47(PtrType array) { return array; }
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 !!! ****");
74#else
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 !!! ****");
80#endif
81
82template <typename T, int Size, int MatrixOrArrayOptions>
84{
85 EIGEN_ALIGN_TO_BOUNDARY(8) T array[Size];
86
89 {
91 check_static_allocation_size<T,Size>();
92 }
93
96 {
97 check_static_allocation_size<T,Size>();
98 }
99};
100
101template <typename T, int Size, int MatrixOrArrayOptions>
103{
104 EIGEN_ALIGN_TO_BOUNDARY(16) T array[Size];
105
108 {
110 check_static_allocation_size<T,Size>();
111 }
112
115 {
116 check_static_allocation_size<T,Size>();
117 }
118};
119
120template <typename T, int Size, int MatrixOrArrayOptions>
122{
123 EIGEN_ALIGN_TO_BOUNDARY(32) T array[Size];
124
127 {
129 check_static_allocation_size<T,Size>();
130 }
131
134 {
135 check_static_allocation_size<T,Size>();
136 }
137};
138
139template <typename T, int Size, int MatrixOrArrayOptions>
141{
142 EIGEN_ALIGN_TO_BOUNDARY(64) T array[Size];
143
146 {
148 check_static_allocation_size<T,Size>();
149 }
150
153 {
154 check_static_allocation_size<T,Size>();
155 }
156};
157
158template <typename T, int MatrixOrArrayOptions, int Alignment>
160{
161 T array[1];
164};
165
167 template<typename T, int Size, int MatrixOrArrayOptions, int Alignment>
171 smart_copy(src.array, src.array + size, dst.array);
172 }
173
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);
184 } else {
185 std::swap_ranges(a.array, a.array + a_size, b.array);
186 }
187 }
188};
189
190} // end namespace internal
191
192/** \internal
193 *
194 * \class DenseStorage
195 * \ingroup Core_Module
196 *
197 * \brief Stores the data of a matrix
198 *
199 * This class stores the data of fixed-size, dynamic-size or mixed matrices
200 * in a way as compact as possible.
201 *
202 * \sa Matrix
203 */
204template<typename T, int Size, int _Rows, int _Cols, int _Options> class DenseStorage;
205
206// purely fixed-size matrix
207template<typename T, int Size, int _Rows, int _Cols, int _Options> class DenseStorage
208{
210 public:
213 }
216 : m_data(internal::constructor_without_unaligned_array_assert()) {}
217#if !EIGEN_HAS_CXX11 || defined(EIGEN_DENSE_STORAGE_CTOR_PLUGIN)
219 DenseStorage(const DenseStorage& other) : m_data(other.m_data) {
221 }
222#else
224#endif
225#if !EIGEN_HAS_CXX11
228 {
229 if (this != &other) m_data = other.m_data;
230 return *this;
231 }
232#else
233 EIGEN_DEVICE_FUNC DenseStorage& operator=(const DenseStorage&) = default;
234#endif
235#if EIGEN_HAS_RVALUE_REFERENCES
236#if !EIGEN_HAS_CXX11
238 : m_data(std::move(other.m_data))
239 {
240 }
241 EIGEN_DEVICE_FUNC DenseStorage& operator=(DenseStorage&& other) EIGEN_NOEXCEPT
242 {
243 if (this != &other)
244 m_data = std::move(other.m_data);
245 return *this;
246 }
247#else
248 EIGEN_DEVICE_FUNC DenseStorage(DenseStorage&&) = default;
249 EIGEN_DEVICE_FUNC DenseStorage& operator=(DenseStorage&&) = default;
250#endif
251#endif
254 eigen_internal_assert(size==rows*cols && rows==_Rows && cols==_Cols);
258 }
260 numext::swap(m_data, other.m_data);
261 }
266 EIGEN_DEVICE_FUNC const T *data() const { return m_data.array; }
267 EIGEN_DEVICE_FUNC T *data() { return m_data.array; }
268};
269
270// null matrix
271template<typename T, int _Rows, int _Cols, int _Options> class DenseStorage<T, 0, _Rows, _Cols, _Options>
272{
273 public:
284 EIGEN_DEVICE_FUNC const T *data() const { return 0; }
285 EIGEN_DEVICE_FUNC T *data() { return 0; }
286};
287
288// more specializations for null matrices; these are necessary to resolve ambiguities
289template<typename T, int _Options> class DenseStorage<T, 0, Dynamic, Dynamic, _Options>
291
292template<typename T, int _Rows, int _Options> class DenseStorage<T, 0, _Rows, Dynamic, _Options>
294
295template<typename T, int _Cols, int _Options> class DenseStorage<T, 0, Dynamic, _Cols, _Options>
297
298// dynamic-size matrix with fixed-size storage
299template<typename T, int Size, int _Options> class DenseStorage<T, Size, Dynamic, Dynamic, _Options>
300{
302 Index m_rows;
303 Index m_cols;
304 public:
305 EIGEN_DEVICE_FUNC DenseStorage() : m_rows(0), m_cols(0) {}
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)
310 {
311 internal::plain_array_helper::copy(other.m_data, m_rows * m_cols, m_data);
312 }
314 {
315 if (this != &other)
316 {
317 m_rows = other.m_rows;
318 m_cols = other.m_cols;
319 internal::plain_array_helper::copy(other.m_data, m_rows * m_cols, m_data);
320 }
321 return *this;
322 }
323 EIGEN_DEVICE_FUNC DenseStorage(Index, Index rows, Index cols) : m_rows(rows), m_cols(cols) {}
325 {
326 internal::plain_array_helper::swap(m_data, m_rows * m_cols, other.m_data, other.m_rows * other.m_cols);
327 numext::swap(m_rows,other.m_rows);
328 numext::swap(m_cols,other.m_cols);
329 }
330 EIGEN_DEVICE_FUNC Index rows() const {return m_rows;}
331 EIGEN_DEVICE_FUNC Index cols() const {return m_cols;}
332 EIGEN_DEVICE_FUNC void conservativeResize(Index, Index rows, Index cols) { m_rows = rows; m_cols = cols; }
333 EIGEN_DEVICE_FUNC void resize(Index, Index rows, Index cols) { m_rows = rows; m_cols = cols; }
334 EIGEN_DEVICE_FUNC const T *data() const { return m_data.array; }
335 EIGEN_DEVICE_FUNC T *data() { return m_data.array; }
336};
337
338// dynamic-size matrix with fixed-size storage and fixed width
339template<typename T, int Size, int _Cols, int _Options> class DenseStorage<T, Size, Dynamic, _Cols, _Options>
340{
342 Index m_rows;
343 public:
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)
349 {
350 internal::plain_array_helper::copy(other.m_data, m_rows * _Cols, m_data);
351 }
352
354 {
355 if (this != &other)
356 {
357 m_rows = other.m_rows;
358 internal::plain_array_helper::copy(other.m_data, m_rows * _Cols, m_data);
359 }
360 return *this;
361 }
364 {
365 internal::plain_array_helper::swap(m_data, m_rows * _Cols, other.m_data, other.m_rows * _Cols);
366 numext::swap(m_rows, other.m_rows);
367 }
368 EIGEN_DEVICE_FUNC Index rows(void) const EIGEN_NOEXCEPT {return m_rows;}
370 EIGEN_DEVICE_FUNC void conservativeResize(Index, Index rows, Index) { m_rows = rows; }
371 EIGEN_DEVICE_FUNC void resize(Index, Index rows, Index) { m_rows = rows; }
372 EIGEN_DEVICE_FUNC const T *data() const { return m_data.array; }
373 EIGEN_DEVICE_FUNC T *data() { return m_data.array; }
374};
375
376// dynamic-size matrix with fixed-size storage and fixed height
377template<typename T, int Size, int _Rows, int _Options> class DenseStorage<T, Size, _Rows, Dynamic, _Options>
378{
380 Index m_cols;
381 public:
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)
387 {
388 internal::plain_array_helper::copy(other.m_data, _Rows * m_cols, m_data);
389 }
391 {
392 if (this != &other)
393 {
394 m_cols = other.m_cols;
395 internal::plain_array_helper::copy(other.m_data, _Rows * m_cols, m_data);
396 }
397 return *this;
398 }
401 internal::plain_array_helper::swap(m_data, _Rows * m_cols, other.m_data, _Rows * other.m_cols);
402 numext::swap(m_cols, other.m_cols);
403 }
405 EIGEN_DEVICE_FUNC Index cols(void) const EIGEN_NOEXCEPT {return m_cols;}
406 EIGEN_DEVICE_FUNC void conservativeResize(Index, Index, Index cols) { m_cols = cols; }
407 EIGEN_DEVICE_FUNC void resize(Index, Index, Index cols) { m_cols = cols; }
408 EIGEN_DEVICE_FUNC const T *data() const { return m_data.array; }
409 EIGEN_DEVICE_FUNC T *data() { return m_data.array; }
410};
411
412// purely dynamic matrix.
413template<typename T, int _Options> class DenseStorage<T, Dynamic, Dynamic, Dynamic, _Options>
414{
415 T *m_data;
416 Index m_rows;
417 Index m_cols;
418 public:
419 EIGEN_DEVICE_FUNC DenseStorage() : m_data(0), m_rows(0), m_cols(0) {}
421 : m_data(0), m_rows(0), m_cols(0) {}
423 : m_data(internal::conditional_aligned_new_auto<T,(_Options&DontAlign)==0>(size)), m_rows(rows), m_cols(cols)
424 {
426 eigen_internal_assert(size==rows*cols && rows>=0 && cols >=0);
427 }
429 : m_data(internal::conditional_aligned_new_auto<T,(_Options&DontAlign)==0>(other.m_rows*other.m_cols))
430 , m_rows(other.m_rows)
431 , m_cols(other.m_cols)
432 {
434 internal::smart_copy(other.m_data, other.m_data+other.m_rows*other.m_cols, m_data);
435 }
437 {
438 if (this != &other)
439 {
440 DenseStorage tmp(other);
441 this->swap(tmp);
442 }
443 return *this;
444 }
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))
451 {
452 other.m_data = nullptr;
453 other.m_rows = 0;
454 other.m_cols = 0;
455 }
457 DenseStorage& operator=(DenseStorage&& other) EIGEN_NOEXCEPT
458 {
459 numext::swap(m_data, other.m_data);
460 numext::swap(m_rows, other.m_rows);
461 numext::swap(m_cols, other.m_cols);
462 return *this;
463 }
464#endif
465 EIGEN_DEVICE_FUNC ~DenseStorage() { internal::conditional_aligned_delete_auto<T,(_Options&DontAlign)==0>(m_data, m_rows*m_cols); }
467 {
468 numext::swap(m_data,other.m_data);
469 numext::swap(m_rows,other.m_rows);
470 numext::swap(m_cols,other.m_cols);
471 }
472 EIGEN_DEVICE_FUNC Index rows(void) const EIGEN_NOEXCEPT {return m_rows;}
473 EIGEN_DEVICE_FUNC Index cols(void) const EIGEN_NOEXCEPT {return m_cols;}
475 {
476 m_data = internal::conditional_aligned_realloc_new_auto<T,(_Options&DontAlign)==0>(m_data, size, m_rows*m_cols);
477 m_rows = rows;
478 m_cols = cols;
479 }
481 {
482 if(size != m_rows*m_cols)
483 {
484 internal::conditional_aligned_delete_auto<T,(_Options&DontAlign)==0>(m_data, m_rows*m_cols);
485 if (size>0) // >0 and not simply !=0 to let the compiler knows that size cannot be negative
486 m_data = internal::conditional_aligned_new_auto<T,(_Options&DontAlign)==0>(size);
487 else
488 m_data = 0;
490 }
491 m_rows = rows;
492 m_cols = cols;
493 }
494 EIGEN_DEVICE_FUNC const T *data() const { return m_data; }
495 EIGEN_DEVICE_FUNC T *data() { return m_data; }
496};
497
498// matrix with dynamic width and fixed height (so that matrix has dynamic size).
499template<typename T, int _Rows, int _Options> class DenseStorage<T, Dynamic, _Rows, Dynamic, _Options>
500{
501 T *m_data;
502 Index m_cols;
503 public:
504 EIGEN_DEVICE_FUNC DenseStorage() : m_data(0), m_cols(0) {}
507 {
509 eigen_internal_assert(size==rows*cols && rows==_Rows && cols >=0);
511 }
513 : m_data(internal::conditional_aligned_new_auto<T,(_Options&DontAlign)==0>(_Rows*other.m_cols))
514 , m_cols(other.m_cols)
515 {
517 internal::smart_copy(other.m_data, other.m_data+_Rows*m_cols, m_data);
518 }
520 {
521 if (this != &other)
522 {
523 DenseStorage tmp(other);
524 this->swap(tmp);
525 }
526 return *this;
527 }
528#if EIGEN_HAS_RVALUE_REFERENCES
531 : m_data(std::move(other.m_data))
532 , m_cols(std::move(other.m_cols))
533 {
534 other.m_data = nullptr;
535 other.m_cols = 0;
536 }
538 DenseStorage& operator=(DenseStorage&& other) EIGEN_NOEXCEPT
539 {
540 numext::swap(m_data, other.m_data);
541 numext::swap(m_cols, other.m_cols);
542 return *this;
543 }
544#endif
545 EIGEN_DEVICE_FUNC ~DenseStorage() { internal::conditional_aligned_delete_auto<T,(_Options&DontAlign)==0>(m_data, _Rows*m_cols); }
547 numext::swap(m_data,other.m_data);
548 numext::swap(m_cols,other.m_cols);
549 }
551 EIGEN_DEVICE_FUNC Index cols(void) const EIGEN_NOEXCEPT {return m_cols;}
553 {
554 m_data = internal::conditional_aligned_realloc_new_auto<T,(_Options&DontAlign)==0>(m_data, size, _Rows*m_cols);
555 m_cols = cols;
556 }
558 {
559 if(size != _Rows*m_cols)
560 {
561 internal::conditional_aligned_delete_auto<T,(_Options&DontAlign)==0>(m_data, _Rows*m_cols);
562 if (size>0) // >0 and not simply !=0 to let the compiler knows that size cannot be negative
563 m_data = internal::conditional_aligned_new_auto<T,(_Options&DontAlign)==0>(size);
564 else
565 m_data = 0;
567 }
568 m_cols = cols;
569 }
570 EIGEN_DEVICE_FUNC const T *data() const { return m_data; }
571 EIGEN_DEVICE_FUNC T *data() { return m_data; }
572};
573
574// matrix with dynamic height and fixed width (so that matrix has dynamic size).
575template<typename T, int _Cols, int _Options> class DenseStorage<T, Dynamic, Dynamic, _Cols, _Options>
576{
577 T *m_data;
578 Index m_rows;
579 public:
580 EIGEN_DEVICE_FUNC DenseStorage() : m_data(0), m_rows(0) {}
583 {
585 eigen_internal_assert(size==rows*cols && rows>=0 && cols == _Cols);
587 }
589 : m_data(internal::conditional_aligned_new_auto<T,(_Options&DontAlign)==0>(other.m_rows*_Cols))
590 , m_rows(other.m_rows)
591 {
593 internal::smart_copy(other.m_data, other.m_data+other.m_rows*_Cols, m_data);
594 }
596 {
597 if (this != &other)
598 {
599 DenseStorage tmp(other);
600 this->swap(tmp);
601 }
602 return *this;
603 }
604#if EIGEN_HAS_RVALUE_REFERENCES
607 : m_data(std::move(other.m_data))
608 , m_rows(std::move(other.m_rows))
609 {
610 other.m_data = nullptr;
611 other.m_rows = 0;
612 }
614 DenseStorage& operator=(DenseStorage&& other) EIGEN_NOEXCEPT
615 {
616 numext::swap(m_data, other.m_data);
617 numext::swap(m_rows, other.m_rows);
618 return *this;
619 }
620#endif
621 EIGEN_DEVICE_FUNC ~DenseStorage() { internal::conditional_aligned_delete_auto<T,(_Options&DontAlign)==0>(m_data, _Cols*m_rows); }
623 numext::swap(m_data,other.m_data);
624 numext::swap(m_rows,other.m_rows);
625 }
626 EIGEN_DEVICE_FUNC Index rows(void) const EIGEN_NOEXCEPT {return m_rows;}
627 EIGEN_DEVICE_FUNC static EIGEN_CONSTEXPR Index cols(void) {return _Cols;}
629 {
630 m_data = internal::conditional_aligned_realloc_new_auto<T,(_Options&DontAlign)==0>(m_data, size, m_rows*_Cols);
631 m_rows = rows;
632 }
634 {
635 if(size != m_rows*_Cols)
636 {
637 internal::conditional_aligned_delete_auto<T,(_Options&DontAlign)==0>(m_data, _Cols*m_rows);
638 if (size>0) // >0 and not simply !=0 to let the compiler knows that size cannot be negative
639 m_data = internal::conditional_aligned_new_auto<T,(_Options&DontAlign)==0>(size);
640 else
641 m_data = 0;
643 }
644 m_rows = rows;
645 }
646 EIGEN_DEVICE_FUNC const T *data() const { return m_data; }
647 EIGEN_DEVICE_FUNC T *data() { return m_data; }
648};
649
650} // end namespace Eigen
651
652#endif // EIGEN_MATRIX_H
#define EIGEN_MAKE_UNALIGNED_ARRAY_ASSERT(sizemask)
Definition: DenseStorage.h:75
#define EIGEN_INTERNAL_DENSE_STORAGE_CTOR_PLUGIN(X)
Definition: DenseStorage.h:18
#define EIGEN_ALWAYS_INLINE
Definition: Macros.h:942
#define eigen_internal_assert(x)
Definition: Macros.h:1053
#define EIGEN_NOEXCEPT
Definition: Macros.h:1428
#define EIGEN_CONSTEXPR
Definition: Macros.h:797
#define EIGEN_UNUSED_VARIABLE(var)
Definition: Macros.h:1086
#define EIGEN_DEVICE_FUNC
Definition: Macros.h:986
#define EIGEN_STACK_ALLOCATION_LIMIT
Definition: Macros.h:54
#define EIGEN_STRONG_INLINE
Definition: Macros.h:927
#define EIGEN_STATIC_ASSERT(CONDITION, MSG)
Definition: StaticAssert.h:127
EIGEN_DEVICE_FUNC DenseStorage(const DenseStorage &)
Definition: DenseStorage.h:276
EIGEN_DEVICE_FUNC T * data()
Definition: DenseStorage.h:285
EIGEN_DEVICE_FUNC DenseStorage()
Definition: DenseStorage.h:274
EIGEN_DEVICE_FUNC void swap(DenseStorage &)
Definition: DenseStorage.h:279
EIGEN_DEVICE_FUNC void conservativeResize(Index, Index, Index)
Definition: DenseStorage.h:282
EIGEN_DEVICE_FUNC DenseStorage(Index, Index, Index)
Definition: DenseStorage.h:278
EIGEN_DEVICE_FUNC DenseStorage & operator=(const DenseStorage &)
Definition: DenseStorage.h:277
EIGEN_DEVICE_FUNC const T * data() const
Definition: DenseStorage.h:284
static EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR Index rows(void) EIGEN_NOEXCEPT
Definition: DenseStorage.h:280
EIGEN_DEVICE_FUNC DenseStorage(internal::constructor_without_unaligned_array_assert)
Definition: DenseStorage.h:275
EIGEN_DEVICE_FUNC void resize(Index, Index, Index)
Definition: DenseStorage.h:283
static EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR Index cols(void) EIGEN_NOEXCEPT
Definition: DenseStorage.h:281
EIGEN_DEVICE_FUNC ~DenseStorage()
Definition: DenseStorage.h:545
EIGEN_DEVICE_FUNC DenseStorage & operator=(const DenseStorage &other)
Definition: DenseStorage.h:519
EIGEN_DEVICE_FUNC void swap(DenseStorage &other)
Definition: DenseStorage.h:546
EIGEN_DEVICE_FUNC Index cols(void) const EIGEN_NOEXCEPT
Definition: DenseStorage.h:551
static EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR Index rows(void) EIGEN_NOEXCEPT
Definition: DenseStorage.h:550
EIGEN_DEVICE_FUNC DenseStorage()
Definition: DenseStorage.h:504
EIGEN_DEVICE_FUNC T * data()
Definition: DenseStorage.h:571
EIGEN_DEVICE_FUNC void conservativeResize(Index size, Index, Index cols)
Definition: DenseStorage.h:552
EIGEN_DEVICE_FUNC const T * data() const
Definition: DenseStorage.h:570
DenseStorage(internal::constructor_without_unaligned_array_assert)
Definition: DenseStorage.h:505
EIGEN_DEVICE_FUNC DenseStorage(const DenseStorage &other)
Definition: DenseStorage.h:512
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void resize(Index size, Index, Index cols)
Definition: DenseStorage.h:557
EIGEN_DEVICE_FUNC DenseStorage(Index size, Index rows, Index cols)
Definition: DenseStorage.h:506
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void resize(Index size, Index rows, Index)
Definition: DenseStorage.h:633
EIGEN_DEVICE_FUNC void swap(DenseStorage &other)
Definition: DenseStorage.h:622
EIGEN_DEVICE_FUNC const T * data() const
Definition: DenseStorage.h:646
static EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR Index cols(void)
Definition: DenseStorage.h:627
EIGEN_DEVICE_FUNC DenseStorage()
Definition: DenseStorage.h:580
DenseStorage(internal::constructor_without_unaligned_array_assert)
Definition: DenseStorage.h:581
void conservativeResize(Index size, Index rows, Index)
Definition: DenseStorage.h:628
EIGEN_DEVICE_FUNC DenseStorage(const DenseStorage &other)
Definition: DenseStorage.h:588
EIGEN_DEVICE_FUNC DenseStorage(Index size, Index rows, Index cols)
Definition: DenseStorage.h:582
EIGEN_DEVICE_FUNC DenseStorage & operator=(const DenseStorage &other)
Definition: DenseStorage.h:595
EIGEN_DEVICE_FUNC ~DenseStorage()
Definition: DenseStorage.h:621
EIGEN_DEVICE_FUNC Index rows(void) const EIGEN_NOEXCEPT
Definition: DenseStorage.h:626
EIGEN_DEVICE_FUNC T * data()
Definition: DenseStorage.h:647
EIGEN_DEVICE_FUNC void swap(DenseStorage &other)
Definition: DenseStorage.h:466
EIGEN_DEVICE_FUNC const T * data() const
Definition: DenseStorage.h:494
EIGEN_DEVICE_FUNC DenseStorage()
Definition: DenseStorage.h:419
EIGEN_DEVICE_FUNC Index rows(void) const EIGEN_NOEXCEPT
Definition: DenseStorage.h:472
EIGEN_DEVICE_FUNC void resize(Index size, Index rows, Index cols)
Definition: DenseStorage.h:480
EIGEN_DEVICE_FUNC DenseStorage(const DenseStorage &other)
Definition: DenseStorage.h:428
void conservativeResize(Index size, Index rows, Index cols)
Definition: DenseStorage.h:474
EIGEN_DEVICE_FUNC DenseStorage(internal::constructor_without_unaligned_array_assert)
Definition: DenseStorage.h:420
EIGEN_DEVICE_FUNC T * data()
Definition: DenseStorage.h:495
EIGEN_DEVICE_FUNC ~DenseStorage()
Definition: DenseStorage.h:465
EIGEN_DEVICE_FUNC Index cols(void) const EIGEN_NOEXCEPT
Definition: DenseStorage.h:473
EIGEN_DEVICE_FUNC DenseStorage(Index size, Index rows, Index cols)
Definition: DenseStorage.h:422
EIGEN_DEVICE_FUNC DenseStorage & operator=(const DenseStorage &other)
Definition: DenseStorage.h:436
EIGEN_DEVICE_FUNC void conservativeResize(Index, Index, Index cols)
Definition: DenseStorage.h:406
EIGEN_DEVICE_FUNC void swap(DenseStorage &other)
Definition: DenseStorage.h:400
EIGEN_DEVICE_FUNC DenseStorage(internal::constructor_without_unaligned_array_assert)
Definition: DenseStorage.h:383
EIGEN_DEVICE_FUNC DenseStorage & operator=(const DenseStorage &other)
Definition: DenseStorage.h:390
EIGEN_DEVICE_FUNC DenseStorage(Index, Index, Index cols)
Definition: DenseStorage.h:399
EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR Index rows(void) const EIGEN_NOEXCEPT
Definition: DenseStorage.h:404
EIGEN_DEVICE_FUNC T * data()
Definition: DenseStorage.h:409
EIGEN_DEVICE_FUNC void resize(Index, Index, Index cols)
Definition: DenseStorage.h:407
EIGEN_DEVICE_FUNC const T * data() const
Definition: DenseStorage.h:408
EIGEN_DEVICE_FUNC DenseStorage(const DenseStorage &other)
Definition: DenseStorage.h:385
EIGEN_DEVICE_FUNC DenseStorage()
Definition: DenseStorage.h:382
EIGEN_DEVICE_FUNC Index cols(void) const EIGEN_NOEXCEPT
Definition: DenseStorage.h:405
EIGEN_DEVICE_FUNC DenseStorage()
Definition: DenseStorage.h:344
EIGEN_DEVICE_FUNC DenseStorage & operator=(const DenseStorage &other)
Definition: DenseStorage.h:353
EIGEN_DEVICE_FUNC void resize(Index, Index rows, Index)
Definition: DenseStorage.h:371
EIGEN_DEVICE_FUNC const T * data() const
Definition: DenseStorage.h:372
EIGEN_DEVICE_FUNC DenseStorage(const DenseStorage &other)
Definition: DenseStorage.h:347
EIGEN_DEVICE_FUNC T * data()
Definition: DenseStorage.h:373
EIGEN_DEVICE_FUNC DenseStorage(internal::constructor_without_unaligned_array_assert)
Definition: DenseStorage.h:345
EIGEN_DEVICE_FUNC Index rows(void) const EIGEN_NOEXCEPT
Definition: DenseStorage.h:368
EIGEN_DEVICE_FUNC DenseStorage(Index, Index rows, Index)
Definition: DenseStorage.h:362
EIGEN_DEVICE_FUNC void conservativeResize(Index, Index rows, Index)
Definition: DenseStorage.h:370
EIGEN_DEVICE_FUNC void swap(DenseStorage &other)
Definition: DenseStorage.h:363
EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR Index cols(void) const EIGEN_NOEXCEPT
Definition: DenseStorage.h:369
EIGEN_DEVICE_FUNC DenseStorage & operator=(const DenseStorage &other)
Definition: DenseStorage.h:313
EIGEN_DEVICE_FUNC void conservativeResize(Index, Index rows, Index cols)
Definition: DenseStorage.h:332
EIGEN_DEVICE_FUNC T * data()
Definition: DenseStorage.h:335
EIGEN_DEVICE_FUNC void swap(DenseStorage &other)
Definition: DenseStorage.h:324
EIGEN_DEVICE_FUNC DenseStorage(const DenseStorage &other)
Definition: DenseStorage.h:308
EIGEN_DEVICE_FUNC DenseStorage()
Definition: DenseStorage.h:305
EIGEN_DEVICE_FUNC Index rows() const
Definition: DenseStorage.h:330
EIGEN_DEVICE_FUNC DenseStorage(internal::constructor_without_unaligned_array_assert)
Definition: DenseStorage.h:306
EIGEN_DEVICE_FUNC DenseStorage(Index, Index rows, Index cols)
Definition: DenseStorage.h:323
EIGEN_DEVICE_FUNC const T * data() const
Definition: DenseStorage.h:334
EIGEN_DEVICE_FUNC void resize(Index, Index rows, Index cols)
Definition: DenseStorage.h:333
EIGEN_DEVICE_FUNC Index cols() const
Definition: DenseStorage.h:331
Definition: DenseStorage.h:208
static EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR Index rows(void) EIGEN_NOEXCEPT
Definition: DenseStorage.h:262
EIGEN_DEVICE_FUNC void resize(Index, Index, Index)
Definition: DenseStorage.h:265
EIGEN_DEVICE_FUNC DenseStorage & operator=(const DenseStorage &other)
Definition: DenseStorage.h:227
EIGEN_DEVICE_FUNC DenseStorage(internal::constructor_without_unaligned_array_assert)
Definition: DenseStorage.h:215
EIGEN_DEVICE_FUNC T * data()
Definition: DenseStorage.h:267
static EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR Index cols(void) EIGEN_NOEXCEPT
Definition: DenseStorage.h:263
EIGEN_DEVICE_FUNC void swap(DenseStorage &other)
Definition: DenseStorage.h:259
EIGEN_DEVICE_FUNC void conservativeResize(Index, Index, Index)
Definition: DenseStorage.h:264
EIGEN_DEVICE_FUNC const T * data() const
Definition: DenseStorage.h:266
EIGEN_DEVICE_FUNC DenseStorage()
Definition: DenseStorage.h:211
EIGEN_DEVICE_FUNC DenseStorage(const DenseStorage &other)
Definition: DenseStorage.h:219
EIGEN_DEVICE_FUNC DenseStorage(Index size, Index rows, Index cols)
Definition: DenseStorage.h:252
@ DontAlign
Don't require alignment for the matrix itself (the array of coefficients, if dynamically allocated,...
Definition: Constants.h:325
EIGEN_DEVICE_FUNC T * smart_move(T *start, T *end, T *target)
Definition: Memory.h:575
EIGEN_DEVICE_FUNC T * conditional_aligned_new_auto(std::size_t size)
Definition: Memory.h:399
EIGEN_DEVICE_FUNC void check_static_allocation_size()
Definition: DenseStorage.h:29
EIGEN_CONSTEXPR Index size(const T &x)
Definition: Meta.h:479
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: Core:141
EIGEN_DEFAULT_DENSE_INDEX_TYPE Index
The Index type as used for the API.
Definition: Meta.h:74
Definition: Eigen_Colamd.h:50
b
Definition: data.h:44
@ value
Definition: XprHelper.h:243
EIGEN_DEVICE_FUNC plain_array()
Definition: DenseStorage.h:162
EIGEN_DEVICE_FUNC plain_array(constructor_without_unaligned_array_assert)
Definition: DenseStorage.h:163
EIGEN_DEVICE_FUNC plain_array(constructor_without_unaligned_array_assert)
Definition: DenseStorage.h:114
EIGEN_DEVICE_FUNC plain_array(constructor_without_unaligned_array_assert)
Definition: DenseStorage.h:133
EIGEN_DEVICE_FUNC plain_array(constructor_without_unaligned_array_assert)
Definition: DenseStorage.h:152
EIGEN_DEVICE_FUNC plain_array(constructor_without_unaligned_array_assert)
Definition: DenseStorage.h:95
Definition: DenseStorage.h:166
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)
Definition: DenseStorage.h:176
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)
Definition: DenseStorage.h:169
Definition: DenseStorage.h:45
EIGEN_DEVICE_FUNC plain_array(constructor_without_unaligned_array_assert)
Definition: DenseStorage.h:55
EIGEN_DEVICE_FUNC plain_array()
Definition: DenseStorage.h:49
T array[Size]
Definition: DenseStorage.h:46