10 #ifndef EIGEN_ASSIGNMENT_FUNCTORS_H 11 #define EIGEN_ASSIGNMENT_FUNCTORS_H 21 template<
typename DstScalar,
typename SrcScalar>
struct assign_op {
23 EIGEN_EMPTY_STRUCT_CTOR(assign_op)
24 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
void assignCoeff(DstScalar& a,
const SrcScalar& b)
const { a = b; }
26 template<
int Alignment,
typename Packet>
27 EIGEN_STRONG_INLINE
void assignPacket(DstScalar* a,
const Packet& b)
const 28 { internal::pstoret<DstScalar,Packet,Alignment>(a,b); }
32 template<
typename DstScalar>
struct assign_op<DstScalar,void> {};
34 template<
typename DstScalar,
typename SrcScalar>
35 struct functor_traits<assign_op<DstScalar,SrcScalar> > {
37 Cost = NumTraits<DstScalar>::ReadCost,
38 PacketAccess = is_same<DstScalar,SrcScalar>::value && packet_traits<DstScalar>::Vectorizable && packet_traits<SrcScalar>::Vectorizable
46 template<
typename DstScalar,
typename SrcScalar>
struct add_assign_op {
48 EIGEN_EMPTY_STRUCT_CTOR(add_assign_op)
49 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
void assignCoeff(DstScalar& a,
const SrcScalar& b)
const { a += b; }
51 template<
int Alignment,
typename Packet>
52 EIGEN_STRONG_INLINE
void assignPacket(DstScalar* a,
const Packet& b)
const 53 { internal::pstoret<DstScalar,Packet,Alignment>(a,internal::padd(internal::ploadt<Packet,Alignment>(a),b)); }
55 template<
typename DstScalar,
typename SrcScalar>
56 struct functor_traits<add_assign_op<DstScalar,SrcScalar> > {
58 Cost = NumTraits<DstScalar>::ReadCost + NumTraits<DstScalar>::AddCost,
59 PacketAccess = is_same<DstScalar,SrcScalar>::value && packet_traits<DstScalar>::HasAdd
67 template<
typename DstScalar,
typename SrcScalar>
struct sub_assign_op {
69 EIGEN_EMPTY_STRUCT_CTOR(sub_assign_op)
70 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
void assignCoeff(DstScalar& a,
const SrcScalar& b)
const { a -= b; }
72 template<
int Alignment,
typename Packet>
73 EIGEN_STRONG_INLINE
void assignPacket(DstScalar* a,
const Packet& b)
const 74 { internal::pstoret<DstScalar,Packet,Alignment>(a,internal::psub(internal::ploadt<Packet,Alignment>(a),b)); }
76 template<
typename DstScalar,
typename SrcScalar>
77 struct functor_traits<sub_assign_op<DstScalar,SrcScalar> > {
79 Cost = NumTraits<DstScalar>::ReadCost + NumTraits<DstScalar>::AddCost,
80 PacketAccess = is_same<DstScalar,SrcScalar>::value && packet_traits<DstScalar>::HasSub
88 template<
typename DstScalar,
typename SrcScalar=DstScalar>
89 struct mul_assign_op {
91 EIGEN_EMPTY_STRUCT_CTOR(mul_assign_op)
92 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
void assignCoeff(DstScalar& a,
const SrcScalar& b)
const { a *= b; }
94 template<
int Alignment,
typename Packet>
95 EIGEN_STRONG_INLINE
void assignPacket(DstScalar* a,
const Packet& b)
const 96 { internal::pstoret<DstScalar,Packet,Alignment>(a,internal::pmul(internal::ploadt<Packet,Alignment>(a),b)); }
98 template<
typename DstScalar,
typename SrcScalar>
99 struct functor_traits<mul_assign_op<DstScalar,SrcScalar> > {
101 Cost = NumTraits<DstScalar>::ReadCost + NumTraits<DstScalar>::MulCost,
102 PacketAccess = is_same<DstScalar,SrcScalar>::value && packet_traits<DstScalar>::HasMul
110 template<
typename DstScalar,
typename SrcScalar=DstScalar>
struct div_assign_op {
112 EIGEN_EMPTY_STRUCT_CTOR(div_assign_op)
113 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
void assignCoeff(DstScalar& a,
const SrcScalar& b)
const { a /= b; }
115 template<
int Alignment,
typename Packet>
116 EIGEN_STRONG_INLINE
void assignPacket(DstScalar* a,
const Packet& b)
const 117 { internal::pstoret<DstScalar,Packet,Alignment>(a,internal::pdiv(internal::ploadt<Packet,Alignment>(a),b)); }
119 template<
typename DstScalar,
typename SrcScalar>
120 struct functor_traits<div_assign_op<DstScalar,SrcScalar> > {
122 Cost = NumTraits<DstScalar>::ReadCost + NumTraits<DstScalar>::MulCost,
123 PacketAccess = is_same<DstScalar,SrcScalar>::value && packet_traits<DstScalar>::HasDiv
142 template<
typename Scalar>
struct swap_assign_op {
144 EIGEN_EMPTY_STRUCT_CTOR(swap_assign_op)
145 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
void assignCoeff(Scalar& a,
const Scalar& b)
const 149 Scalar t=b;
const_cast<Scalar&
>(b)=a; a=t;
152 swap(a,const_cast<Scalar&>(b));
156 template<
typename Scalar>
157 struct functor_traits<swap_assign_op<Scalar> > {
159 Cost = 3 * NumTraits<Scalar>::ReadCost,
160 PacketAccess = packet_traits<Scalar>::Vectorizable
168 #endif // EIGEN_ASSIGNMENT_FUNCTORS_H Namespace containing all symbols from the Eigen library.
Definition: Core:287
Definition: Eigen_Colamd.h:50