Medial Code Documentation
Loading...
Searching...
No Matches
AssignmentFunctors.h
1// This file is part of Eigen, a lightweight C++ template library
2// for linear algebra.
3//
4// Copyright (C) 2008-2010 Gael Guennebaud <gael.guennebaud@inria.fr>
5//
6// This Source Code Form is subject to the terms of the Mozilla
7// Public License v. 2.0. If a copy of the MPL was not distributed
8// with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
9
10#ifndef EIGEN_ASSIGNMENT_FUNCTORS_H
11#define EIGEN_ASSIGNMENT_FUNCTORS_H
12
13namespace Eigen {
14
15namespace internal {
16
21template<typename Scalar> struct assign_op {
22
23 EIGEN_EMPTY_STRUCT_CTOR(assign_op)
24 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void assignCoeff(Scalar& a, const Scalar& b) const { a = b; }
25
26 template<int Alignment, typename Packet>
27 EIGEN_STRONG_INLINE void assignPacket(Scalar* a, const Packet& b) const
28 { internal::pstoret<Scalar,Packet,Alignment>(a,b); }
29};
30template<typename Scalar>
31struct functor_traits<assign_op<Scalar> > {
32 enum {
35 };
36};
37
42template<typename Scalar> struct add_assign_op {
43
44 EIGEN_EMPTY_STRUCT_CTOR(add_assign_op)
45 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void assignCoeff(Scalar& a, const Scalar& b) const { a += b; }
46
47 template<int Alignment, typename Packet>
48 EIGEN_STRONG_INLINE void assignPacket(Scalar* a, const Packet& b) const
49 { internal::pstoret<Scalar,Packet,Alignment>(a,internal::padd(internal::ploadt<Packet,Alignment>(a),b)); }
50};
51template<typename Scalar>
52struct functor_traits<add_assign_op<Scalar> > {
53 enum {
56 };
57};
58
63template<typename Scalar> struct sub_assign_op {
64
65 EIGEN_EMPTY_STRUCT_CTOR(sub_assign_op)
66 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void assignCoeff(Scalar& a, const Scalar& b) const { a -= b; }
67
68 template<int Alignment, typename Packet>
69 EIGEN_STRONG_INLINE void assignPacket(Scalar* a, const Packet& b) const
70 { internal::pstoret<Scalar,Packet,Alignment>(a,internal::psub(internal::ploadt<Packet,Alignment>(a),b)); }
71};
72template<typename Scalar>
73struct functor_traits<sub_assign_op<Scalar> > {
74 enum {
77 };
78};
79
84template<typename DstScalar, typename SrcScalar=DstScalar>
86
87 EIGEN_EMPTY_STRUCT_CTOR(mul_assign_op)
88 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void assignCoeff(DstScalar& a, const SrcScalar& b) const { a *= b; }
89
90 template<int Alignment, typename Packet>
91 EIGEN_STRONG_INLINE void assignPacket(DstScalar* a, const Packet& b) const
92 { internal::pstoret<DstScalar,Packet,Alignment>(a,internal::pmul(internal::ploadt<Packet,Alignment>(a),b)); }
93};
94template<typename DstScalar, typename SrcScalar>
101template<typename DstScalar,typename SrcScalar> struct functor_is_product_like<mul_assign_op<DstScalar,SrcScalar> > { enum { ret = 1 }; };
102
107template<typename Scalar> struct div_assign_op {
108
109 EIGEN_EMPTY_STRUCT_CTOR(div_assign_op)
110 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void assignCoeff(Scalar& a, const Scalar& b) const { a /= b; }
111
112 template<int Alignment, typename Packet>
113 EIGEN_STRONG_INLINE void assignPacket(Scalar* a, const Packet& b) const
114 { internal::pstoret<Scalar,Packet,Alignment>(a,internal::pdiv(internal::ploadt<Packet,Alignment>(a),b)); }
115};
116template<typename Scalar>
118 enum {
120 PacketAccess = packet_traits<Scalar>::HasDiv
121 };
122};
123
124
140template<typename Scalar> struct swap_assign_op {
141
142 EIGEN_EMPTY_STRUCT_CTOR(swap_assign_op)
143 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void assignCoeff(Scalar& a, const Scalar& b) const
144 {
145#ifdef __CUDACC__
146 // FIXME is there some kind of cuda::swap?
147 Scalar t=b; const_cast<Scalar&>(b)=a; a=t;
148#else
149 using std::swap;
150 swap(a,const_cast<Scalar&>(b));
151#endif
152 }
153};
154template<typename Scalar>
156 enum {
159 };
160};
161
162} // namespace internal
163
164} // namespace Eigen
165
166#endif // EIGEN_ASSIGNMENT_FUNCTORS_H
Pseudo expression representing a solving operation.
Definition Solve.h:63
NLOHMANN_BASIC_JSON_TPL_DECLARATION void swap(nlohmann::NLOHMANN_BASIC_JSON_TPL &j1, nlohmann::NLOHMANN_BASIC_JSON_TPL &j2) noexcept(//NOLINT(readability-inconsistent-declaration-parameter-name, cert-dcl58-cpp) is_nothrow_move_constructible< nlohmann::NLOHMANN_BASIC_JSON_TPL >::value &&//NOLINT(misc-redundant-expression) is_nothrow_move_assignable< nlohmann::NLOHMANN_BASIC_JSON_TPL >::value)
exchanges the values of two JSON objects
Definition json.hpp:24418
Holds information about the various numeric (i.e.
Definition NumTraits.h:108
Definition AssignmentFunctors.h:42
Definition AssignmentFunctors.h:21
Definition AssignmentFunctors.h:107
Definition BinaryFunctors.h:426
Definition XprHelper.h:107
Definition Meta.h:39
Definition AssignmentFunctors.h:85
Definition GenericPacketMath.h:90
Definition AssignmentFunctors.h:63
Definition AssignmentFunctors.h:140