diff options
Diffstat (limited to 'unsupported')
-rw-r--r-- | unsupported/Eigen/CXX11/src/Tensor/Tensor.h | 5 | ||||
-rw-r--r-- | unsupported/Eigen/CXX11/src/Tensor/TensorStorage.h | 14 | ||||
-rw-r--r-- | unsupported/test/cxx11_tensor_move.cpp | 5 |
3 files changed, 16 insertions, 8 deletions
diff --git a/unsupported/Eigen/CXX11/src/Tensor/Tensor.h b/unsupported/Eigen/CXX11/src/Tensor/Tensor.h index 200f58bf4..8cac2bb12 100644 --- a/unsupported/Eigen/CXX11/src/Tensor/Tensor.h +++ b/unsupported/Eigen/CXX11/src/Tensor/Tensor.h @@ -402,14 +402,13 @@ class Tensor : public TensorBase<Tensor<Scalar_, NumIndices_, Options_, IndexTyp #if EIGEN_HAS_RVALUE_REFERENCES EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Tensor(Self&& other) - : Tensor() + : m_storage(std::move(other.m_storage)) { - m_storage.swap(other.m_storage); } EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Tensor& operator=(Self&& other) { - m_storage.swap(other.m_storage); + m_storage = std::move(other.m_storage); return *this; } #endif diff --git a/unsupported/Eigen/CXX11/src/Tensor/TensorStorage.h b/unsupported/Eigen/CXX11/src/Tensor/TensorStorage.h index 656fd211e..5ff0880e7 100644 --- a/unsupported/Eigen/CXX11/src/Tensor/TensorStorage.h +++ b/unsupported/Eigen/CXX11/src/Tensor/TensorStorage.h @@ -108,6 +108,20 @@ class TensorStorage<T, DSizes<IndexType, NumIndices_>, Options_> return *this; } +#if EIGEN_HAS_RVALUE_REFERENCES + EIGEN_DEVICE_FUNC TensorStorage(Self&& other) : TensorStorage() + { + *this = std::move(other); + } + + EIGEN_DEVICE_FUNC Self& operator=(Self&& other) + { + numext::swap(m_data, other.m_data); + numext::swap(m_dimensions, other.m_dimensions); + return *this; + } +#endif + EIGEN_DEVICE_FUNC ~TensorStorage() { internal::conditional_aligned_delete_auto<T,(Options_&DontAlign)==0>(m_data, internal::array_prod(m_dimensions)); } EIGEN_DEVICE_FUNC void swap(Self& other) { numext::swap(m_data,other.m_data); numext::swap(m_dimensions,other.m_dimensions); } diff --git a/unsupported/test/cxx11_tensor_move.cpp b/unsupported/test/cxx11_tensor_move.cpp index 0ab2b7786..a2982319f 100644 --- a/unsupported/test/cxx11_tensor_move.cpp +++ b/unsupported/test/cxx11_tensor_move.cpp @@ -62,14 +62,9 @@ static void test_move() moved_tensor3 = std::move(moved_tensor1); moved_tensor4 = std::move(moved_tensor2); - VERIFY_IS_EQUAL(moved_tensor1.size(), 8); - VERIFY_IS_EQUAL(moved_tensor2.size(), 8); - for (int i = 0; i < 8; i++) { calc_indices(i, x, y, z); - VERIFY_IS_EQUAL(moved_tensor1(x,y,z), 0); - VERIFY_IS_EQUAL(moved_tensor2(x,y,z), 0); VERIFY_IS_EQUAL(moved_tensor3(x,y,z), i); VERIFY_IS_EQUAL(moved_tensor4(x,y,z), 2 * i); } |