Eigen  3.4.90 (git rev 5a9f66fb35d03a4da9ef8976e67a61b30aa16dcf)
 
Loading...
Searching...
No Matches
Assign.h
1// This file is part of Eigen, a lightweight C++ template library
2// for linear algebra.
3//
4// Copyright (C) 2007 Michael Olbrich <[email protected]>
5// Copyright (C) 2006-2010 Benoit Jacob <[email protected]>
6// Copyright (C) 2008 Gael Guennebaud <[email protected]>
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// IWYU pragma: private
16#include "./InternalHeaderCheck.h"
17
18namespace Eigen {
19
20template <typename Derived>
21template <typename OtherDerived>
22EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Derived& DenseBase<Derived>::lazyAssign(const DenseBase<OtherDerived>& other) {
23 enum { SameType = internal::is_same<typename Derived::Scalar, typename OtherDerived::Scalar>::value };
24
25 EIGEN_STATIC_ASSERT_LVALUE(Derived)
26 EIGEN_STATIC_ASSERT_SAME_MATRIX_SIZE(Derived, OtherDerived)
27 EIGEN_STATIC_ASSERT(
28 SameType,
29 YOU_MIXED_DIFFERENT_NUMERIC_TYPES__YOU_NEED_TO_USE_THE_CAST_METHOD_OF_MATRIXBASE_TO_CAST_NUMERIC_TYPES_EXPLICITLY)
30
31 eigen_assert(rows() == other.rows() && cols() == other.cols());
32 internal::call_assignment_no_alias(derived(), other.derived());
33
34 return derived();
35}
36
37template <typename Derived>
38template <typename OtherDerived>
39EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Derived& DenseBase<Derived>::operator=(const DenseBase<OtherDerived>& other) {
40 internal::call_assignment(derived(), other.derived());
41 return derived();
42}
43
44template <typename Derived>
45EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Derived& DenseBase<Derived>::operator=(const DenseBase& other) {
46 internal::call_assignment(derived(), other.derived());
47 return derived();
48}
49
50template <typename Derived>
51EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Derived& MatrixBase<Derived>::operator=(const MatrixBase& other) {
52 internal::call_assignment(derived(), other.derived());
53 return derived();
54}
55
56template <typename Derived>
57template <typename OtherDerived>
58EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Derived& MatrixBase<Derived>::operator=(const DenseBase<OtherDerived>& other) {
59 internal::call_assignment(derived(), other.derived());
60 return derived();
61}
62
63template <typename Derived>
64template <typename OtherDerived>
65EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Derived& MatrixBase<Derived>::operator=(const EigenBase<OtherDerived>& other) {
66 internal::call_assignment(derived(), other.derived());
67 return derived();
68}
69
70template <typename Derived>
71template <typename OtherDerived>
72EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Derived& MatrixBase<Derived>::operator=(
73 const ReturnByValue<OtherDerived>& other) {
74 other.derived().evalTo(derived());
75 return derived();
76}
77
78} // end namespace Eigen
79
80#endif // EIGEN_ASSIGN_H
Base class for all dense matrices, vectors, and arrays.
Definition DenseBase.h:44
Derived & derived()
Definition EigenBase.h:49
Base class for all dense matrices, vectors, and expressions.
Definition MatrixBase.h:52
Namespace containing all symbols from the Eigen library.
Definition Core:137