10 #ifndef EIGEN_BINARY_FUNCTORS_H 11 #define EIGEN_BINARY_FUNCTORS_H 19 template<
typename Arg1,
typename Arg2>
22 typedef Arg1 first_argument_type;
23 typedef Arg2 second_argument_type;
31 template<
typename LhsScalar,
typename RhsScalar>
35 #ifndef EIGEN_SCALAR_BINARY_OP_PLUGIN 39 EIGEN_SCALAR_BINARY_OP_PLUGIN
42 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
const result_type operator() (
const LhsScalar& a,
const RhsScalar& b)
const {
return a + b; }
43 template<
typename Packet>
44 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
const Packet packetOp(
const Packet& a,
const Packet& b)
const 45 {
return internal::padd(a,b); }
46 template<
typename Packet>
47 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
const result_type predux(
const Packet& a)
const 48 {
return internal::predux(a); }
50 template<
typename LhsScalar,
typename RhsScalar>
75 template<
typename LhsScalar,
typename RhsScalar>
79 #ifndef EIGEN_SCALAR_BINARY_OP_PLUGIN 83 EIGEN_SCALAR_BINARY_OP_PLUGIN
86 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
const result_type operator() (
const LhsScalar& a,
const RhsScalar& b)
const {
return a * b; }
87 template<
typename Packet>
88 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
const Packet packetOp(
const Packet& a,
const Packet& b)
const 89 {
return internal::pmul(a,b); }
90 template<
typename Packet>
91 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
const result_type predux(
const Packet& a)
const 92 {
return internal::predux_mul(a); }
94 template<
typename LhsScalar,
typename RhsScalar>
108 template<
typename LhsScalar,
typename RhsScalar>
119 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
const result_type operator() (
const LhsScalar& a,
const RhsScalar& b)
const 122 template<
typename Packet>
123 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
const Packet packetOp(
const Packet& a,
const Packet& b)
const 126 template<
typename LhsScalar,
typename RhsScalar>
139 template<
typename LhsScalar,
typename RhsScalar>
144 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
const result_type operator() (
const LhsScalar& a,
const RhsScalar& b)
const {
return numext::mini(a, b); }
145 template<
typename Packet>
146 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
const Packet packetOp(
const Packet& a,
const Packet& b)
const 147 {
return internal::pmin(a,b); }
148 template<
typename Packet>
149 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
const result_type predux(
const Packet& a)
const 150 {
return internal::predux_min(a); }
152 template<
typename LhsScalar,
typename RhsScalar>
165 template<
typename LhsScalar,
typename RhsScalar>
170 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
const result_type operator() (
const LhsScalar& a,
const RhsScalar& b)
const {
return numext::maxi(a, b); }
171 template<
typename Packet>
172 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
const Packet packetOp(
const Packet& a,
const Packet& b)
const 173 {
return internal::pmax(a,b); }
174 template<
typename Packet>
175 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
const result_type predux(
const Packet& a)
const 176 {
return internal::predux_max(a); }
178 template<
typename LhsScalar,
typename RhsScalar>
190 template<
typename LhsScalar,
typename RhsScalar, ComparisonName cmp>
struct scalar_cmp_op;
192 template<
typename LhsScalar,
typename RhsScalar, ComparisonName cmp>
200 template<ComparisonName Cmp,
typename LhsScalar,
typename RhsScalar>
206 template<
typename LhsScalar,
typename RhsScalar>
209 typedef bool result_type;
211 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
bool operator()(
const LhsScalar& a,
const RhsScalar& b)
const {
return a==b;}
213 template<
typename LhsScalar,
typename RhsScalar>
216 typedef bool result_type;
218 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
bool operator()(
const LhsScalar& a,
const RhsScalar& b)
const {
return a<b;}
220 template<
typename LhsScalar,
typename RhsScalar>
223 typedef bool result_type;
225 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
bool operator()(
const LhsScalar& a,
const RhsScalar& b)
const {
return a<=b;}
227 template<
typename LhsScalar,
typename RhsScalar>
230 typedef bool result_type;
232 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
bool operator()(
const LhsScalar& a,
const RhsScalar& b)
const {
return a>b;}
234 template<
typename LhsScalar,
typename RhsScalar>
237 typedef bool result_type;
239 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
bool operator()(
const LhsScalar& a,
const RhsScalar& b)
const {
return a>=b;}
241 template<
typename LhsScalar,
typename RhsScalar>
244 typedef bool result_type;
246 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
bool operator()(
const LhsScalar& a,
const RhsScalar& b)
const {
return !(a<=b || b<=a);}
248 template<
typename LhsScalar,
typename RhsScalar>
251 typedef bool result_type;
253 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
bool operator()(
const LhsScalar& a,
const RhsScalar& b)
const {
return a!=b;}
262 template<
typename Scalar>
267 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
const Scalar operator() (
const Scalar& _x,
const Scalar& _y)
const 269 EIGEN_USING_STD_MATH(sqrt)
281 return p * sqrt(Scalar(1) + qp*qp);
284 template<
typename Scalar>
298 template<
typename Scalar,
typename Exponent>
302 #ifndef EIGEN_SCALAR_BINARY_OP_PLUGIN 306 typedef Scalar LhsScalar;
307 typedef Exponent RhsScalar;
308 EIGEN_SCALAR_BINARY_OP_PLUGIN
312 inline result_type operator() (
const Scalar& a,
const Exponent& b)
const {
return numext::pow(a, b); }
314 template<
typename Scalar,
typename Exponent>
328 template<
typename LhsScalar,
typename RhsScalar>
332 #ifndef EIGEN_SCALAR_BINARY_OP_PLUGIN 336 EIGEN_SCALAR_BINARY_OP_PLUGIN
339 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
const result_type operator() (
const LhsScalar& a,
const RhsScalar& b)
const {
return a - b; }
340 template<
typename Packet>
341 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
const Packet packetOp(
const Packet& a,
const Packet& b)
const 342 {
return internal::psub(a,b); }
344 template<
typename LhsScalar,
typename RhsScalar>
357 template<
typename LhsScalar,
typename RhsScalar>
361 #ifndef EIGEN_SCALAR_BINARY_OP_PLUGIN 365 EIGEN_SCALAR_BINARY_OP_PLUGIN
368 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
const result_type operator() (
const LhsScalar& a,
const RhsScalar& b)
const {
return a / b; }
369 template<
typename Packet>
370 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
const Packet packetOp(
const Packet& a,
const Packet& b)
const 371 {
return internal::pdiv(a,b); }
373 template<
typename LhsScalar,
typename RhsScalar>
375 typedef typename scalar_quotient_op<LhsScalar,RhsScalar>::result_type result_type;
391 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
bool operator() (
const bool& a,
const bool& b)
const {
return a && b; }
407 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
bool operator() (
const bool& a,
const bool& b)
const {
return a || b; }
423 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
bool operator() (
const bool& a,
const bool& b)
const {
return a ^ b; }
442 typedef typename BinaryOp::first_argument_type first_argument_type;
443 typedef typename BinaryOp::second_argument_type second_argument_type;
444 typedef typename BinaryOp::result_type result_type;
446 bind1st_op(
const first_argument_type &val) : m_value(val) {}
448 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
const result_type operator() (
const second_argument_type& b)
const {
return BinaryOp::operator()(m_value,b); }
450 template<
typename Packet>
451 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
const Packet packetOp(
const Packet& b)
const 452 {
return BinaryOp::packetOp(internal::pset1<Packet>(m_value), b); }
454 first_argument_type m_value;
461 typedef typename BinaryOp::first_argument_type first_argument_type;
462 typedef typename BinaryOp::second_argument_type second_argument_type;
463 typedef typename BinaryOp::result_type result_type;
465 bind2nd_op(
const second_argument_type &val) : m_value(val) {}
467 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
const result_type operator() (
const first_argument_type& a)
const {
return BinaryOp::operator()(a,m_value); }
469 template<
typename Packet>
470 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
const Packet packetOp(
const Packet& a)
const 471 {
return BinaryOp::packetOp(a,internal::pset1<Packet>(m_value)); }
473 second_argument_type m_value;
482 #endif // EIGEN_BINARY_FUNCTORS_H Definition: BlasUtil.h:61
Definition: BinaryFunctors.h:32
Namespace containing all symbols from the Eigen library.
Definition: bench_norm.cpp:85
Holds information about the various numeric (i.e.
Definition: NumTraits.h:150
Definition: BinaryFunctors.h:190
Definition: GenericPacketMath.h:96
Definition: BinaryFunctors.h:389
Definition: BinaryFunctors.h:76
Definition: BinaryFunctors.h:358
Definition: BinaryFunctors.h:421
Definition: BinaryFunctors.h:459
Definition: BinaryFunctors.h:405
Definition: PacketMath.h:48
Definition: BandTriangularSolver.h:13
Definition: BinaryFunctors.h:140
Definition: BinaryFunctors.h:299
Definition: XprHelper.h:146
Definition: BinaryFunctors.h:20
Definition: BinaryFunctors.h:329
Definition: XprHelper.h:666
Definition: ForwardDeclarations.h:207
Determines whether the given binary operation of two numeric types is allowed and what the scalar ret...
Definition: XprHelper.h:757
Definition: BinaryFunctors.h:109
Definition: BinaryFunctors.h:440
Definition: BinaryFunctors.h:166