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_STRONG_INLINE Derived& DenseBase<Derived> lazyAssign(const DenseBase<OtherDerived> & other)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 EIGEN_STRONG_INLINE Derived& DenseBase<Derived>::operator=(const DenseBase<OtherDerived>& other) 40 { 41 internal::call_assignment(derived(), other.derived()); 42 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 EIGEN_STRONG_INLINE Derived& MatrixBase<Derived>::operator=(const DenseBase<OtherDerived>& other) 65 { 66 internal::call_assignment(derived(), other.derived()); 67 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 91