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> |
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 | |