10#ifndef EIGEN_BINARY_FUNCTORS_H
11#define EIGEN_BINARY_FUNCTORS_H
19template<
typename Arg1,
typename Arg2>
22 typedef Arg1 first_argument_type;
23 typedef Arg2 second_argument_type;
31template<
typename LhsScalar,
typename RhsScalar>
35#ifndef EIGEN_SCALAR_BINARY_OP_PLUGIN
42 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE result_type
operator() (
const LhsScalar& a,
const RhsScalar& b)
const {
return a + b; }
43 template<
typename Packet>
44 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
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 result_type predux(
const Packet& a)
const
48 {
return internal::predux(a); }
50template<
typename LhsScalar,
typename RhsScalar>
69template<
typename LhsScalar,
typename RhsScalar>
73#ifndef EIGEN_SCALAR_BINARY_OP_PLUGIN
80 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE result_type
operator() (
const LhsScalar& a,
const RhsScalar& b)
const {
return a * b; }
81 template<
typename Packet>
82 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
Packet packetOp(
const Packet& a,
const Packet& b)
const
83 {
return internal::pmul(a,b); }
84 template<
typename Packet>
85 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE result_type predux(
const Packet& a)
const
86 {
return internal::predux_mul(a); }
88template<
typename LhsScalar,
typename RhsScalar>
106template<
typename LhsScalar,
typename RhsScalar>
117 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE result_type
operator() (
const LhsScalar& a,
const RhsScalar& b)
const
120 template<
typename Packet>
121 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
Packet packetOp(
const Packet& a,
const Packet& b)
const
124template<
typename LhsScalar,
typename RhsScalar>
137template<
typename LhsScalar,
typename RhsScalar,
int NaNPropagation>
142 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE result_type
operator() (
const LhsScalar& a,
const RhsScalar& b)
const {
143 return internal::pmin<NaNPropagation>(a, b);
145 template<
typename Packet>
146 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
Packet packetOp(
const Packet& a,
const Packet& b)
const
148 return internal::pmin<NaNPropagation>(a,b);
150 template<
typename Packet>
151 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE result_type predux(
const Packet& a)
const
153 return internal::predux_min<NaNPropagation>(a);
157template<
typename LhsScalar,
typename RhsScalar,
int NaNPropagation>
170template<
typename LhsScalar,
typename RhsScalar,
int NaNPropagation>
175 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE result_type
operator() (
const LhsScalar& a,
const RhsScalar& b)
const {
176 return internal::pmax<NaNPropagation>(a,b);
178 template<
typename Packet>
179 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
Packet packetOp(
const Packet& a,
const Packet& b)
const
181 return internal::pmax<NaNPropagation>(a,b);
183 template<
typename Packet>
184 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE result_type predux(
const Packet& a)
const
186 return internal::predux_max<NaNPropagation>(a);
190template<
typename LhsScalar,
typename RhsScalar,
int NaNPropagation>
202template<
typename LhsScalar,
typename RhsScalar, ComparisonName cmp>
struct scalar_cmp_op;
204template<
typename LhsScalar,
typename RhsScalar, ComparisonName cmp>
212template<ComparisonName Cmp,
typename LhsScalar,
typename RhsScalar>
218template<
typename LhsScalar,
typename RhsScalar>
221 typedef bool result_type;
223 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
bool operator()(
const LhsScalar& a,
const RhsScalar& b)
const {
return a==b;}
225template<
typename LhsScalar,
typename RhsScalar>
228 typedef bool result_type;
230 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
bool operator()(
const LhsScalar& a,
const RhsScalar& b)
const {
return a<b;}
232template<
typename LhsScalar,
typename RhsScalar>
235 typedef bool result_type;
237 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
bool operator()(
const LhsScalar& a,
const RhsScalar& b)
const {
return a<=b;}
239template<
typename LhsScalar,
typename RhsScalar>
242 typedef bool result_type;
244 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
bool operator()(
const LhsScalar& a,
const RhsScalar& b)
const {
return a>b;}
246template<
typename LhsScalar,
typename RhsScalar>
249 typedef bool result_type;
251 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
bool operator()(
const LhsScalar& a,
const RhsScalar& b)
const {
return a>=b;}
253template<
typename LhsScalar,
typename RhsScalar>
256 typedef bool result_type;
258 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
bool operator()(
const LhsScalar& a,
const RhsScalar& b)
const {
return !(a<=b || b<=a);}
260template<
typename LhsScalar,
typename RhsScalar>
263 typedef bool result_type;
265 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
bool operator()(
const LhsScalar& a,
const RhsScalar& b)
const {
return a!=b;}
273template<
typename Scalar>
278 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
const Scalar
operator() (
const Scalar &x,
const Scalar &y)
const
285 return internal::positive_real_hypot(x,y);
288template<
typename Scalar>
303template<
typename Scalar,
typename Exponent>
307#ifndef EIGEN_SCALAR_BINARY_OP_PLUGIN
311 typedef Scalar LhsScalar;
318 inline result_type
operator() (
const Scalar& a,
const Exponent& b)
const {
return numext::pow(a, b); }
320 template<
typename Packet>
321 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
const Packet packetOp(
const Packet& a,
const Packet& b)
const
323 return generic_pow(a,b);
327template<
typename Scalar,
typename Exponent>
348template<
typename LhsScalar,
typename RhsScalar>
352#ifndef EIGEN_SCALAR_BINARY_OP_PLUGIN
359 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
const result_type
operator() (
const LhsScalar& a,
const RhsScalar& b)
const {
return a - b; }
360 template<
typename Packet>
361 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
const Packet packetOp(
const Packet& a,
const Packet& b)
const
362 {
return internal::psub(a,b); }
364template<
typename LhsScalar,
typename RhsScalar>
377template<
typename LhsScalar,
typename RhsScalar>
381#ifndef EIGEN_SCALAR_BINARY_OP_PLUGIN
388 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
const result_type
operator() (
const LhsScalar& a,
const RhsScalar& b)
const {
return a / b; }
389 template<
typename Packet>
390 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
const Packet packetOp(
const Packet& a,
const Packet& b)
const
391 {
return internal::pdiv(a,b); }
393template<
typename LhsScalar,
typename RhsScalar>
395 typedef typename scalar_quotient_op<LhsScalar,RhsScalar>::result_type result_type;
411 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
bool operator() (
const bool& a,
const bool& b)
const {
return a && b; }
412 template<
typename Packet>
413 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
const Packet packetOp(
const Packet& a,
const Packet& b)
const
414 {
return internal::pand(a,b); }
430 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
bool operator() (
const bool& a,
const bool& b)
const {
return a || b; }
431 template<
typename Packet>
432 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
const Packet packetOp(
const Packet& a,
const Packet& b)
const
433 {
return internal::por(a,b); }
449 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
bool operator() (
const bool& a,
const bool& b)
const {
return a ^ b; }
450 template<
typename Packet>
451 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
const Packet packetOp(
const Packet& a,
const Packet& b)
const
452 {
return internal::pxor(a,b); }
466template<
typename LhsScalar,
typename RhsScalar>
470#ifndef EIGEN_SCALAR_BINARY_OP_PLUGIN
477 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
const result_type
operator() (
const LhsScalar& a,
const RhsScalar& b)
const
478 {
return numext::absdiff(a,b); }
479 template<
typename Packet>
480 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
const Packet packetOp(
const Packet& a,
const Packet& b)
const
481 {
return internal::pabsdiff(a,b); }
483template<
typename LhsScalar,
typename RhsScalar>
501 typedef typename BinaryOp::first_argument_type first_argument_type;
502 typedef typename BinaryOp::second_argument_type second_argument_type;
503 typedef typename BinaryOp::result_type result_type;
505 EIGEN_DEVICE_FUNC
explicit bind1st_op(
const first_argument_type &val) : m_value(val) {}
507 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
const result_type
operator() (
const second_argument_type& b)
const {
return BinaryOp::operator()(m_value,b); }
509 template<
typename Packet>
510 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
const Packet packetOp(
const Packet& b)
const
511 {
return BinaryOp::packetOp(internal::pset1<Packet>(m_value), b); }
513 first_argument_type m_value;
520 typedef typename BinaryOp::first_argument_type first_argument_type;
521 typedef typename BinaryOp::second_argument_type second_argument_type;
522 typedef typename BinaryOp::result_type result_type;
524 EIGEN_DEVICE_FUNC
explicit bind2nd_op(
const second_argument_type &val) : m_value(val) {}
526 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
const result_type
operator() (
const first_argument_type& a)
const {
return BinaryOp::operator()(a,m_value); }
528 template<
typename Packet>
529 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
const Packet packetOp(
const Packet& a)
const
530 {
return BinaryOp::packetOp(a,internal::pset1<Packet>(m_value)); }
532 second_argument_type m_value;
Base class for all dense matrices, vectors, and expressions.
Definition MatrixBase.h:50
Namespace containing all symbols from the Eigen library.
Definition LDLT.h:16
Holds information about the various numeric (i.e.
Definition NumTraits.h:236
Determines whether the given binary operation of two numeric types is allowed and what the scalar ret...
Definition XprHelper.h:806
Definition BinaryFunctors.h:21
Definition BinaryFunctors.h:499
Definition BinaryFunctors.h:518
Definition XprHelper.h:176
Definition GenericPacketMath.h:107
Definition BinaryFunctors.h:468
Definition BinaryFunctors.h:409
Definition BinaryFunctors.h:428
Definition BinaryFunctors.h:447
Definition BinaryFunctors.h:202
Definition BinaryFunctors.h:108
Definition BinaryFunctors.h:350
Definition XprHelper.h:710
Definition ForwardDeclarations.h:210
Definition BinaryFunctors.h:172
Definition BinaryFunctors.h:139
Definition BinaryFunctors.h:305
Definition BinaryFunctors.h:71
Definition BinaryFunctors.h:379
Definition BinaryFunctors.h:33
Definition PacketMath.h:47