![]() |
Eigen
3.3.3
|
00001 // This file is part of Eigen, a lightweight C++ template library 00002 // for linear algebra. 00003 // 00004 // Copyright (C) 2007 Michael Olbrich <michael.olbrich@gmx.net> 00005 // Copyright (C) 2006-2010 Benoit Jacob <jacob.benoit.1@gmail.com> 00006 // Copyright (C) 2008 Gael Guennebaud <gael.guennebaud@inria.fr> 00007 // 00008 // This Source Code Form is subject to the terms of the Mozilla 00009 // Public License v. 2.0. If a copy of the MPL was not distributed 00010 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/. 00011 00012 #ifndef EIGEN_ASSIGN_H 00013 #define EIGEN_ASSIGN_H 00014 00015 namespace Eigen { 00016 00017 template<typename Derived> 00018 template<typename OtherDerived> 00019 EIGEN_STRONG_INLINE Derived& DenseBase<Derived> 00020 ::lazyAssign(const DenseBase<OtherDerived>& other) 00021 { 00022 enum{ 00023 SameType = internal::is_same<typename Derived::Scalar,typename OtherDerived::Scalar>::value 00024 }; 00025 00026 EIGEN_STATIC_ASSERT_LVALUE(Derived) 00027 EIGEN_STATIC_ASSERT_SAME_MATRIX_SIZE(Derived,OtherDerived) 00028 EIGEN_STATIC_ASSERT(SameType,YOU_MIXED_DIFFERENT_NUMERIC_TYPES__YOU_NEED_TO_USE_THE_CAST_METHOD_OF_MATRIXBASE_TO_CAST_NUMERIC_TYPES_EXPLICITLY) 00029 00030 eigen_assert(rows() == other.rows() && cols() == other.cols()); 00031 internal::call_assignment_no_alias(derived(),other.derived()); 00032 00033 return derived(); 00034 } 00035 00036 template<typename Derived> 00037 template<typename OtherDerived> 00038 EIGEN_DEVICE_FUNC 00039 EIGEN_STRONG_INLINE Derived& DenseBase<Derived>::operator=(const DenseBase<OtherDerived>& other) 00040 { 00041 internal::call_assignment(derived(), other.derived()); 00042 return derived(); 00043 } 00044 00045 template<typename Derived> 00046 EIGEN_DEVICE_FUNC 00047 EIGEN_STRONG_INLINE Derived& DenseBase<Derived>::operator=(const DenseBase& other) 00048 { 00049 internal::call_assignment(derived(), other.derived()); 00050 return derived(); 00051 } 00052 00053 template<typename Derived> 00054 EIGEN_DEVICE_FUNC 00055 EIGEN_STRONG_INLINE Derived& MatrixBase<Derived>::operator=(const MatrixBase& other) 00056 { 00057 internal::call_assignment(derived(), other.derived()); 00058 return derived(); 00059 } 00060 00061 template<typename Derived> 00062 template <typename OtherDerived> 00063 EIGEN_DEVICE_FUNC 00064 EIGEN_STRONG_INLINE Derived& MatrixBase<Derived>::operator=(const DenseBase<OtherDerived>& other) 00065 { 00066 internal::call_assignment(derived(), other.derived()); 00067 return derived(); 00068 } 00069 00070 template<typename Derived> 00071 template <typename OtherDerived> 00072 EIGEN_DEVICE_FUNC 00073 EIGEN_STRONG_INLINE Derived& MatrixBase<Derived>::operator=(const EigenBase<OtherDerived>& other) 00074 { 00075 internal::call_assignment(derived(), other.derived()); 00076 return derived(); 00077 } 00078 00079 template<typename Derived> 00080 template<typename OtherDerived> 00081 EIGEN_DEVICE_FUNC 00082 EIGEN_STRONG_INLINE Derived& MatrixBase<Derived>::operator=(const ReturnByValue<OtherDerived>& other) 00083 { 00084 other.derived().evalTo(derived()); 00085 return derived(); 00086 } 00087 00088 } // end namespace Eigen 00089 00090 #endif // EIGEN_ASSIGN_H