TR-mbed 1.0
Loading...
Searching...
No Matches
AssignmentFunctors.h
Go to the documentation of this file.
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 DstScalar,typename SrcScalar> struct assign_op {
22
24 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void assignCoeff(DstScalar& a, const SrcScalar& b) const { a = b; }
25
26 template<int Alignment, typename Packet>
29};
30
31// Empty overload for void type (used by PermutationMatrix)
32template<typename DstScalar> struct assign_op<DstScalar,void> {};
33
34template<typename DstScalar,typename SrcScalar>
41
46template<typename DstScalar,typename SrcScalar> struct add_assign_op {
47
49 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void assignCoeff(DstScalar& a, const SrcScalar& b) const { a += b; }
50
51 template<int Alignment, typename Packet>
54};
55template<typename DstScalar,typename SrcScalar>
62
67template<typename DstScalar,typename SrcScalar> struct sub_assign_op {
68
70 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void assignCoeff(DstScalar& a, const SrcScalar& b) const { a -= b; }
71
72 template<int Alignment, typename Packet>
75};
76template<typename DstScalar,typename SrcScalar>
83
88template<typename DstScalar, typename SrcScalar=DstScalar>
90
92 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void assignCoeff(DstScalar& a, const SrcScalar& b) const { a *= b; }
93
94 template<int Alignment, typename Packet>
97};
98template<typename DstScalar, typename SrcScalar>
105
110template<typename DstScalar, typename SrcScalar=DstScalar> struct div_assign_op {
111
113 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void assignCoeff(DstScalar& a, const SrcScalar& b) const { a /= b; }
114
115 template<int Alignment, typename Packet>
118};
119template<typename DstScalar, typename SrcScalar>
126
142template<typename Scalar> struct swap_assign_op {
143
146 {
147#ifdef EIGEN_GPUCC
148 // FIXME is there some kind of cuda::swap?
149 Scalar t=b; const_cast<Scalar&>(b)=a; a=t;
150#else
151 using std::swap;
152 swap(a,const_cast<Scalar&>(b));
153#endif
154 }
155};
156template<typename Scalar>
158 enum {
160 PacketAccess =
161 #if defined(EIGEN_VECTORIZE_AVX) && EIGEN_COMP_CLANG && (EIGEN_COMP_CLANG<800 || defined(__apple_build_version__))
162 // This is a partial workaround for a bug in clang generating bad code
163 // when mixing 256/512 bits loads and 128 bits moves.
164 // See http://eigen.tuxfamily.org/bz/show_bug.cgi?id=1684
165 // https://bugs.llvm.org/show_bug.cgi?id=40815
166 0
167 #else
169 #endif
170 };
171};
172
173} // namespace internal
174
175} // namespace Eigen
176
177#endif // EIGEN_ASSIGNMENT_FUNCTORS_H
ArrayXXi a
Definition Array_initializer_list_23_cxx11.cpp:1
#define EIGEN_DEVICE_FUNC
Definition Macros.h:976
#define EIGEN_STRONG_INLINE
Definition Macros.h:917
#define EIGEN_EMPTY_STRUCT_CTOR(X)
Definition XprHelper.h:22
Scalar * b
Definition benchVecAdd.cpp:17
SCALAR Scalar
Definition bench_gemm.cpp:46
EIGEN_DEVICE_FUNC Packet padd(const Packet &a, const Packet &b)
Definition GenericPacketMath.h:215
EIGEN_DEVICE_FUNC Packet pdiv(const Packet &a, const Packet &b)
Definition GenericPacketMath.h:244
EIGEN_DEVICE_FUNC Packet pmul(const Packet &a, const Packet &b)
Definition GenericPacketMath.h:237
EIGEN_DEVICE_FUNC Packet psub(const Packet &a, const Packet &b)
Definition GenericPacketMath.h:222
void swap(scoped_array< T > &a, scoped_array< T > &b)
Definition Memory.h:709
Namespace containing all symbols from the Eigen library.
Definition bench_norm.cpp:85
Definition BandTriangularSolver.h:13
Holds information about the various numeric (i.e. scalar) types allowed by Eigen.
Definition NumTraits.h:233
Definition AssignmentFunctors.h:46
EIGEN_STRONG_INLINE void assignPacket(DstScalar *a, const Packet &b) const
Definition AssignmentFunctors.h:52
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void assignCoeff(DstScalar &a, const SrcScalar &b) const
Definition AssignmentFunctors.h:49
Definition AssignmentFunctors.h:21
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void assignCoeff(DstScalar &a, const SrcScalar &b) const
Definition AssignmentFunctors.h:24
EIGEN_STRONG_INLINE void assignPacket(DstScalar *a, const Packet &b) const
Definition AssignmentFunctors.h:27
Definition AssignmentFunctors.h:110
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void assignCoeff(DstScalar &a, const SrcScalar &b) const
Definition AssignmentFunctors.h:113
EIGEN_STRONG_INLINE void assignPacket(DstScalar *a, const Packet &b) const
Definition AssignmentFunctors.h:116
Definition XprHelper.h:176
@ PacketAccess
Definition XprHelper.h:180
@ Cost
Definition XprHelper.h:179
Definition Meta.h:148
Definition AssignmentFunctors.h:89
EIGEN_STRONG_INLINE void assignPacket(DstScalar *a, const Packet &b) const
Definition AssignmentFunctors.h:95
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void assignCoeff(DstScalar &a, const SrcScalar &b) const
Definition AssignmentFunctors.h:92
Definition GenericPacketMath.h:107
Definition AssignmentFunctors.h:67
EIGEN_STRONG_INLINE void assignPacket(DstScalar *a, const Packet &b) const
Definition AssignmentFunctors.h:73
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void assignCoeff(DstScalar &a, const SrcScalar &b) const
Definition AssignmentFunctors.h:70
Definition AssignmentFunctors.h:142
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void assignCoeff(Scalar &a, const Scalar &b) const
Definition AssignmentFunctors.h:145
Definition ForwardDeclarations.h:17
Definition PacketMath.h:47