mirror of
https://gitlab.com/libeigen/eigen.git
synced 2025-08-11 19:29:02 +08:00
Make DenseStorage<> trivially_copyable
This commit is contained in:
parent
c81da59a25
commit
60400334a9
@ -214,17 +214,26 @@ template<typename T, int Size, int _Rows, int _Cols, int _Options> class DenseSt
|
|||||||
EIGEN_DEVICE_FUNC
|
EIGEN_DEVICE_FUNC
|
||||||
explicit DenseStorage(internal::constructor_without_unaligned_array_assert)
|
explicit DenseStorage(internal::constructor_without_unaligned_array_assert)
|
||||||
: m_data(internal::constructor_without_unaligned_array_assert()) {}
|
: m_data(internal::constructor_without_unaligned_array_assert()) {}
|
||||||
|
#if !EIGEN_HAS_CXX11 || defined(EIGEN_DENSE_STORAGE_CTOR_PLUGIN)
|
||||||
EIGEN_DEVICE_FUNC
|
EIGEN_DEVICE_FUNC
|
||||||
DenseStorage(const DenseStorage& other) : m_data(other.m_data) {
|
DenseStorage(const DenseStorage& other) : m_data(other.m_data) {
|
||||||
EIGEN_INTERNAL_DENSE_STORAGE_CTOR_PLUGIN(Index size = Size)
|
EIGEN_INTERNAL_DENSE_STORAGE_CTOR_PLUGIN(Index size = Size)
|
||||||
}
|
}
|
||||||
|
#else
|
||||||
|
EIGEN_DEVICE_FUNC DenseStorage(const DenseStorage& other) = default;
|
||||||
|
#endif
|
||||||
|
#if !EIGEN_HAS_CXX11
|
||||||
EIGEN_DEVICE_FUNC
|
EIGEN_DEVICE_FUNC
|
||||||
DenseStorage& operator=(const DenseStorage& other)
|
DenseStorage& operator=(const DenseStorage& other)
|
||||||
{
|
{
|
||||||
if (this != &other) m_data = other.m_data;
|
if (this != &other) m_data = other.m_data;
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
#else
|
||||||
|
EIGEN_DEVICE_FUNC DenseStorage& operator=(const DenseStorage& other) = default;
|
||||||
|
#endif
|
||||||
#if EIGEN_HAS_RVALUE_REFERENCES
|
#if EIGEN_HAS_RVALUE_REFERENCES
|
||||||
|
#if !EIGEN_HAS_CXX11
|
||||||
EIGEN_DEVICE_FUNC DenseStorage(DenseStorage&& other) EIGEN_NOEXCEPT
|
EIGEN_DEVICE_FUNC DenseStorage(DenseStorage&& other) EIGEN_NOEXCEPT
|
||||||
: m_data(std::move(other.m_data))
|
: m_data(std::move(other.m_data))
|
||||||
{
|
{
|
||||||
@ -235,6 +244,10 @@ template<typename T, int Size, int _Rows, int _Cols, int _Options> class DenseSt
|
|||||||
m_data = std::move(other.m_data);
|
m_data = std::move(other.m_data);
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
#else
|
||||||
|
EIGEN_DEVICE_FUNC DenseStorage(DenseStorage&& other) EIGEN_NOEXCEPT = default;
|
||||||
|
EIGEN_DEVICE_FUNC DenseStorage& operator=(DenseStorage&& other) EIGEN_NOEXCEPT = default;
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
EIGEN_DEVICE_FUNC DenseStorage(Index size, Index rows, Index cols) {
|
EIGEN_DEVICE_FUNC DenseStorage(Index size, Index rows, Index cols) {
|
||||||
EIGEN_INTERNAL_DENSE_STORAGE_CTOR_PLUGIN({})
|
EIGEN_INTERNAL_DENSE_STORAGE_CTOR_PLUGIN({})
|
||||||
|
@ -13,6 +13,17 @@
|
|||||||
|
|
||||||
#include <Eigen/Core>
|
#include <Eigen/Core>
|
||||||
|
|
||||||
|
#if EIGEN_HAS_TYPE_TRAITS && EIGEN_HAS_CXX11
|
||||||
|
using DenseStorageD3x3 = Eigen::DenseStorage<double, 3, 3, 3, 3>;
|
||||||
|
static_assert(std::is_trivially_move_constructible<DenseStorageD3x3>::value, "DenseStorage not trivially_move_constructible");
|
||||||
|
static_assert(std::is_trivially_move_assignable<DenseStorageD3x3>::value, "DenseStorage not trivially_move_assignable");
|
||||||
|
#if !defined(EIGEN_DENSE_STORAGE_CTOR_PLUGIN)
|
||||||
|
static_assert(std::is_trivially_copy_constructible<DenseStorageD3x3>::value, "DenseStorage not trivially_copy_constructible");
|
||||||
|
static_assert(std::is_trivially_copy_assignable<DenseStorageD3x3>::value, "DenseStorage not trivially_copy_assignable");
|
||||||
|
static_assert(std::is_trivially_copyable<DenseStorageD3x3>::value, "DenseStorage not trivially_copyable");
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
template <typename T, int Size, int Rows, int Cols>
|
template <typename T, int Size, int Rows, int Cols>
|
||||||
void dense_storage_copy(int rows, int cols)
|
void dense_storage_copy(int rows, int cols)
|
||||||
{
|
{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user