From 2c0ef43b48074d03c2737459e1771e41ff061362 Mon Sep 17 00:00:00 2001 From: William Talbot Date: Mon, 4 Apr 2022 16:50:09 +0000 Subject: [PATCH] Added Scaling function overload for vector rvalue reference --- Eigen/src/Core/DiagonalMatrix.h | 4 ++++ Eigen/src/Geometry/Scaling.h | 5 +++++ 2 files changed, 9 insertions(+) diff --git a/Eigen/src/Core/DiagonalMatrix.h b/Eigen/src/Core/DiagonalMatrix.h index 45375d5c8..06cfdc170 100644 --- a/Eigen/src/Core/DiagonalMatrix.h +++ b/Eigen/src/Core/DiagonalMatrix.h @@ -200,6 +200,10 @@ class DiagonalMatrix explicit EIGEN_STRONG_INLINE DiagonalMatrix(const std::initializer_list>& list) : m_diagonal(list) {} + /** \brief Constructs a DiagonalMatrix from an r-value diagonal vector type */ + EIGEN_DEVICE_FUNC + explicit inline DiagonalMatrix(DiagonalVectorType&& diag) : m_diagonal(std::move(diag)) {} + /** Copy constructor. */ template EIGEN_DEVICE_FUNC diff --git a/Eigen/src/Geometry/Scaling.h b/Eigen/src/Geometry/Scaling.h index 48a192ed0..8bcdce634 100644 --- a/Eigen/src/Geometry/Scaling.h +++ b/Eigen/src/Geometry/Scaling.h @@ -162,6 +162,11 @@ template inline const DiagonalWrapper Scaling(const MatrixBase& coeffs) { return coeffs.asDiagonal(); } +/** Constructs an axis aligned scaling expression from vector \a coeffs when passed as an rvalue reference */ +template +inline typename DiagonalWrapper::PlainObject Scaling(MatrixBase&& coeffs) +{ return typename DiagonalWrapper::PlainObject(std::move(coeffs.derived())); } + /** \deprecated */ typedef DiagonalMatrix AlignedScaling2f; /** \deprecated */