Branch data Line data Source code
1 : : // This file is part of Eigen, a lightweight C++ template library 2 : : // for linear algebra. 3 : : // 4 : : // Copyright (C) 2007 Michael Olbrich <michael.olbrich@gmx.net> 5 : : // Copyright (C) 2006-2010 Benoit Jacob <jacob.benoit.1@gmail.com> 6 : : // Copyright (C) 2008 Gael Guennebaud <gael.guennebaud@inria.fr> 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_ASSIGN_H 13 : : #define EIGEN_ASSIGN_H 14 : : 15 : : namespace Eigen { 16 : : 17 : : template<typename Derived> 18 : : template<typename OtherDerived> 19 : : EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Derived& DenseBase<Derived> 20 : : ::lazyAssign(const DenseBase<OtherDerived>& other) 21 : : { 22 : : enum{ 23 : : SameType = internal::is_same<typename Derived::Scalar,typename OtherDerived::Scalar>::value 24 : : }; 25 : : 26 : : EIGEN_STATIC_ASSERT_LVALUE(Derived) 27 : : EIGEN_STATIC_ASSERT_SAME_MATRIX_SIZE(Derived,OtherDerived) 28 : : EIGEN_STATIC_ASSERT(SameType,YOU_MIXED_DIFFERENT_NUMERIC_TYPES__YOU_NEED_TO_USE_THE_CAST_METHOD_OF_MATRIXBASE_TO_CAST_NUMERIC_TYPES_EXPLICITLY) 29 : : 30 : : eigen_assert(rows() == other.rows() && cols() == other.cols()); 31 : : internal::call_assignment_no_alias(derived(),other.derived()); 32 : : 33 : : return derived(); 34 : : } 35 : : 36 : : template<typename Derived> 37 : : template<typename OtherDerived> 38 : : EIGEN_DEVICE_FUNC 39 : 16908 : EIGEN_STRONG_INLINE Derived& DenseBase<Derived>::operator=(const DenseBase<OtherDerived>& other) 40 : : { 41 : 16908 : internal::call_assignment(derived(), other.derived()); 42 : 16908 : return derived(); 43 : : } 44 : : 45 : : template<typename Derived> 46 : : EIGEN_DEVICE_FUNC 47 : : EIGEN_STRONG_INLINE Derived& DenseBase<Derived>::operator=(const DenseBase& other) 48 : : { 49 : : internal::call_assignment(derived(), other.derived()); 50 : : return derived(); 51 : : } 52 : : 53 : : template<typename Derived> 54 : : EIGEN_DEVICE_FUNC 55 : : EIGEN_STRONG_INLINE Derived& MatrixBase<Derived>::operator=(const MatrixBase& other) 56 : : { 57 : : internal::call_assignment(derived(), other.derived()); 58 : : return derived(); 59 : : } 60 : : 61 : : template<typename Derived> 62 : : template <typename OtherDerived> 63 : : EIGEN_DEVICE_FUNC 64 : 9340 : EIGEN_STRONG_INLINE Derived& MatrixBase<Derived>::operator=(const DenseBase<OtherDerived>& other) 65 : : { 66 : 9340 : internal::call_assignment(derived(), other.derived()); 67 : 9340 : return derived(); 68 : : } 69 : : 70 : : template<typename Derived> 71 : : template <typename OtherDerived> 72 : : EIGEN_DEVICE_FUNC 73 : : EIGEN_STRONG_INLINE Derived& MatrixBase<Derived>::operator=(const EigenBase<OtherDerived>& other) 74 : : { 75 : : internal::call_assignment(derived(), other.derived()); 76 : : return derived(); 77 : : } 78 : : 79 : : template<typename Derived> 80 : : template<typename OtherDerived> 81 : : EIGEN_DEVICE_FUNC 82 : : EIGEN_STRONG_INLINE Derived& MatrixBase<Derived>::operator=(const ReturnByValue<OtherDerived>& other) 83 : : { 84 : : other.derived().evalTo(derived()); 85 : : return derived(); 86 : : } 87 : : 88 : : } // end namespace Eigen 89 : : 90 : : #endif // EIGEN_ASSIGN_H