10 #ifndef EIGEN_FUNCTORS_H 11 #define EIGEN_FUNCTORS_H 26 EIGEN_STRONG_INLINE
const Scalar operator() (
const Scalar& a,
const Scalar& b)
const {
return a + b; }
27 template<
typename Packet>
28 EIGEN_STRONG_INLINE
const Packet packetOp(
const Packet& a,
const Packet& b)
const 29 {
return internal::padd(a,b); }
30 template<
typename Packet>
31 EIGEN_STRONG_INLINE
const Scalar predux(
const Packet& a)
const 32 {
return internal::predux(a); }
34 template<
typename Scalar>
54 EIGEN_STRONG_INLINE
const result_type operator() (
const LhsScalar& a,
const RhsScalar& b)
const {
return a * b; }
55 template<
typename Packet>
56 EIGEN_STRONG_INLINE
const Packet packetOp(
const Packet& a,
const Packet& b)
const 57 {
return internal::pmul(a,b); }
58 template<
typename Packet>
59 EIGEN_STRONG_INLINE
const result_type predux(
const Packet& a)
const 60 {
return internal::predux_mul(a); }
62 template<
typename LhsScalar,
typename RhsScalar>
84 EIGEN_STRONG_INLINE
const result_type operator() (
const LhsScalar& a,
const RhsScalar& b)
const 87 template<
typename Packet>
88 EIGEN_STRONG_INLINE
const Packet packetOp(
const Packet& a,
const Packet& b)
const 91 template<
typename LhsScalar,
typename RhsScalar>
106 EIGEN_STRONG_INLINE
const Scalar operator() (
const Scalar& a,
const Scalar& b)
const {
using std::min;
return (min)(a, b); }
107 template<
typename Packet>
108 EIGEN_STRONG_INLINE
const Packet packetOp(
const Packet& a,
const Packet& b)
const 109 {
return internal::pmin(a,b); }
110 template<
typename Packet>
111 EIGEN_STRONG_INLINE
const Scalar predux(
const Packet& a)
const 112 {
return internal::predux_min(a); }
114 template<
typename Scalar>
129 EIGEN_STRONG_INLINE
const Scalar operator() (
const Scalar& a,
const Scalar& b)
const {
using std::max;
return (max)(a, b); }
130 template<
typename Packet>
131 EIGEN_STRONG_INLINE
const Packet packetOp(
const Packet& a,
const Packet& b)
const 132 {
return internal::pmax(a,b); }
133 template<
typename Packet>
134 EIGEN_STRONG_INLINE
const Scalar predux(
const Packet& a)
const 135 {
return internal::predux_max(a); }
137 template<
typename Scalar>
153 EIGEN_STRONG_INLINE
const Scalar operator() (
const Scalar& _x,
const Scalar& _y)
const 158 Scalar p = (max)(_x, _y);
159 Scalar q = (min)(_x, _y);
161 return p * sqrt(
Scalar(1) + qp*qp);
164 template<
typename Scalar>
174 inline Scalar operator() (
const Scalar& a,
const OtherScalar& b)
const {
return numext::pow(a, b); }
176 template<
typename Scalar,
typename OtherScalar>
190 EIGEN_STRONG_INLINE
const Scalar operator() (
const Scalar& a,
const Scalar& b)
const {
return a - b; }
191 template<
typename Packet>
192 EIGEN_STRONG_INLINE
const Packet packetOp(
const Packet& a,
const Packet& b)
const 193 {
return internal::psub(a,b); }
195 template<
typename Scalar>
215 EIGEN_STRONG_INLINE
const result_type operator() (
const LhsScalar& a,
const RhsScalar& b)
const {
return a / b; }
216 template<
typename Packet>
217 EIGEN_STRONG_INLINE
const Packet packetOp(
const Packet& a,
const Packet& b)
const 218 {
return internal::pdiv(a,b); }
220 template<
typename LhsScalar,
typename RhsScalar>
237 EIGEN_STRONG_INLINE
bool operator() (
const bool& a,
const bool& b)
const {
return a && b; }
253 EIGEN_STRONG_INLINE
bool operator() (
const bool& a,
const bool& b)
const {
return a || b; }
268 template<
typename Scalar, ComparisonName cmp>
276 template<ComparisonName Cmp,
typename Scalar>
284 EIGEN_STRONG_INLINE
bool operator()(
const Scalar& a,
const Scalar& b)
const {
return a==b;}
288 EIGEN_STRONG_INLINE
bool operator()(
const Scalar& a,
const Scalar& b)
const {
return a<b;}
292 EIGEN_STRONG_INLINE
bool operator()(
const Scalar& a,
const Scalar& b)
const {
return a<=b;}
296 EIGEN_STRONG_INLINE
bool operator()(
const Scalar& a,
const Scalar& b)
const {
return !(a<=b || b<=a);}
300 EIGEN_STRONG_INLINE
bool operator()(
const Scalar& a,
const Scalar& b)
const {
return a!=b;}
312 EIGEN_STRONG_INLINE
const Scalar operator() (
const Scalar& a)
const {
return -a; }
313 template<
typename Packet>
314 EIGEN_STRONG_INLINE
const Packet packetOp(
const Packet& a)
const 315 {
return internal::pnegate(a); }
317 template<
typename Scalar>
332 EIGEN_STRONG_INLINE
const result_type operator() (
const Scalar& a)
const {
using std::abs;
return abs(a); }
333 template<
typename Packet>
334 EIGEN_STRONG_INLINE
const Packet packetOp(
const Packet& a)
const 335 {
return internal::pabs(a); }
337 template<
typename Scalar>
354 EIGEN_STRONG_INLINE
const result_type operator() (
const Scalar& a)
const {
return numext::abs2(a); }
355 template<
typename Packet>
356 EIGEN_STRONG_INLINE
const Packet packetOp(
const Packet& a)
const 357 {
return internal::pmul(a,a); }
359 template<
typename Scalar>
370 EIGEN_STRONG_INLINE
const Scalar operator() (
const Scalar& a)
const {
using numext::conj;
return conj(a); }
371 template<
typename Packet>
372 EIGEN_STRONG_INLINE
const Packet packetOp(
const Packet& a)
const {
return internal::pconj(a); }
374 template<
typename Scalar>
388 template<
typename Scalar,
typename NewType>
391 typedef NewType result_type;
392 EIGEN_STRONG_INLINE
const NewType operator() (
const Scalar& a)
const {
return cast<Scalar, NewType>(a); }
394 template<
typename Scalar,
typename NewType>
403 template<
typename Scalar>
407 EIGEN_STRONG_INLINE result_type operator() (
const Scalar& a)
const {
return numext::real(a); }
409 template<
typename Scalar>
411 {
enum { Cost = 0, PacketAccess =
false }; };
418 template<
typename Scalar>
422 EIGEN_STRONG_INLINE result_type operator() (
const Scalar& a)
const {
return numext::imag(a); }
424 template<
typename Scalar>
426 {
enum { Cost = 0, PacketAccess =
false }; };
433 template<
typename Scalar>
437 EIGEN_STRONG_INLINE result_type& operator() (
const Scalar& a)
const {
return numext::real_ref(*const_cast<Scalar*>(&a)); }
439 template<
typename Scalar>
441 {
enum { Cost = 0, PacketAccess =
false }; };
448 template<
typename Scalar>
452 EIGEN_STRONG_INLINE result_type& operator() (
const Scalar& a)
const {
return numext::imag_ref(*const_cast<Scalar*>(&a)); }
454 template<
typename Scalar>
456 {
enum { Cost = 0, PacketAccess =
false }; };
466 inline const Scalar operator() (
const Scalar& a)
const {
using std::exp;
return exp(a); }
468 inline Packet packetOp(
const Packet& a)
const {
return internal::pexp(a); }
470 template<
typename Scalar>
482 inline const Scalar operator() (
const Scalar& a)
const {
using std::log;
return log(a); }
484 inline Packet packetOp(
const Packet& a)
const {
return internal::plog(a); }
486 template<
typename Scalar>
503 template<
typename Scalar>
508 EIGEN_STRONG_INLINE scalar_multiple_op(
const Scalar& other) : m_other(other) { }
509 EIGEN_STRONG_INLINE Scalar operator() (
const Scalar& a)
const {
return a * m_other; }
510 EIGEN_STRONG_INLINE
const Packet packetOp(
const Packet& a)
const 511 {
return internal::pmul(a, pset1<Packet>(m_other)); }
514 template<
typename Scalar>
518 template<
typename Scalar1,
typename Scalar2>
522 EIGEN_STRONG_INLINE scalar_multiple2_op(
const Scalar2& other) : m_other(other) { }
523 EIGEN_STRONG_INLINE result_type operator() (
const Scalar1& a)
const {
return a * m_other; }
526 template<
typename Scalar1,
typename Scalar2>
538 template<
typename Scalar>
543 EIGEN_STRONG_INLINE scalar_quotient1_op(
const Scalar& other) : m_other(other) {}
544 EIGEN_STRONG_INLINE Scalar operator() (
const Scalar& a)
const {
return a / m_other; }
545 EIGEN_STRONG_INLINE
const Packet packetOp(
const Packet& a)
const 546 {
return internal::pdiv(a, pset1<Packet>(m_other)); }
549 template<
typename Scalar>
555 template<
typename Scalar>
559 EIGEN_STRONG_INLINE scalar_constant_op(
const Scalar& other) : m_other(other) { }
560 template<
typename Index>
561 EIGEN_STRONG_INLINE
const Scalar operator() (Index, Index = 0)
const {
return m_other; }
562 template<
typename Index>
563 EIGEN_STRONG_INLINE
const Packet packetOp(Index, Index = 0)
const {
return internal::pset1<Packet>(m_other); }
564 const Scalar m_other;
566 template<
typename Scalar>
573 template<
typename Index>
574 EIGEN_STRONG_INLINE
const Scalar operator() (Index row, Index col)
const {
return row==col ?
Scalar(1) :
Scalar(0); }
576 template<
typename Scalar>
590 template <
typename Scalar>
596 m_low(low), m_step(step),
600 template<
typename Index>
601 EIGEN_STRONG_INLINE
const Scalar operator() (Index i)
const 603 m_base = padd(m_base, pset1<Packet>(m_step));
604 return m_low+
Scalar(i)*m_step;
607 template<
typename Index>
608 EIGEN_STRONG_INLINE
const Packet packetOp(Index)
const {
return m_base = padd(m_base,m_packetStep); }
612 const Packet m_packetStep;
613 mutable Packet m_base;
619 template <
typename Scalar>
625 m_low(low), m_step(step),
626 m_lowPacket(pset1<Packet>(m_low)), m_stepPacket(pset1<Packet>(m_step)), m_interPacket(plset<Scalar>(0)) {}
628 template<
typename Index>
629 EIGEN_STRONG_INLINE
const Scalar operator() (Index i)
const {
return m_low+i*m_step; }
631 template<
typename Index>
632 EIGEN_STRONG_INLINE
const Packet packetOp(Index i)
const 633 {
return internal::padd(m_lowPacket, pmul(m_stepPacket, padd(pset1<Packet>(
Scalar(i)),m_interPacket))); }
637 const Packet m_lowPacket;
638 const Packet m_stepPacket;
639 const Packet m_interPacket;
647 template <
typename Scalar,
bool RandomAccess = true>
struct linspaced_op;
650 template <
typename Scalar,
bool RandomAccess>
struct linspaced_op 653 linspaced_op(
const Scalar& low,
const Scalar& high, DenseIndex num_steps) : impl((num_steps==1 ? high : low), (num_steps==1 ?
Scalar() : (high-low)/
Scalar(num_steps-1))) {}
655 template<
typename Index>
656 EIGEN_STRONG_INLINE
const Scalar operator() (Index i)
const {
return impl(i); }
660 template<
typename Index>
661 EIGEN_STRONG_INLINE
const Scalar operator() (Index row, Index col)
const 663 eigen_assert(col==0 || row==0);
664 return impl(col + row);
667 template<
typename Index>
668 EIGEN_STRONG_INLINE
const Packet packetOp(Index i)
const {
return impl.packetOp(i); }
672 template<
typename Index>
673 EIGEN_STRONG_INLINE
const Packet packetOp(Index row, Index col)
const 675 eigen_assert(col==0 || row==0);
676 return impl.packetOp(col + row);
707 template<
typename Scalar>
712 inline scalar_add_op(
const Scalar& other) : m_other(other) { }
713 inline Scalar operator() (
const Scalar& a)
const {
return a + m_other; }
714 inline const Packet packetOp(
const Packet& a)
const 715 {
return internal::padd(a, pset1<Packet>(m_other)); }
716 const Scalar m_other;
718 template<
typename Scalar>
728 inline const Scalar operator() (
const Scalar& a)
const {
using std::sqrt;
return sqrt(a); }
730 inline Packet packetOp(
const Packet& a)
const {
return internal::psqrt(a); }
732 template<
typename Scalar>
746 inline Scalar operator() (
const Scalar& a)
const {
using std::cos;
return cos(a); }
748 inline Packet packetOp(
const Packet& a)
const {
return internal::pcos(a); }
750 template<
typename Scalar>
765 inline const Scalar operator() (
const Scalar& a)
const {
using std::sin;
return sin(a); }
767 inline Packet packetOp(
const Packet& a)
const {
return internal::psin(a); }
769 template<
typename Scalar>
785 inline const Scalar operator() (
const Scalar& a)
const {
using std::tan;
return tan(a); }
787 inline Packet packetOp(
const Packet& a)
const {
return internal::ptan(a); }
789 template<
typename Scalar>
804 inline const Scalar operator() (
const Scalar& a)
const {
using std::acos;
return acos(a); }
806 inline Packet packetOp(
const Packet& a)
const {
return internal::pacos(a); }
808 template<
typename Scalar>
823 inline const Scalar operator() (
const Scalar& a)
const {
using std::asin;
return asin(a); }
825 inline Packet packetOp(
const Packet& a)
const {
return internal::pasin(a); }
827 template<
typename Scalar>
840 template<
typename Scalar>
844 inline scalar_pow_op(
const Scalar& exponent) : m_exponent(exponent) {}
845 inline Scalar operator() (
const Scalar& a)
const {
return numext::pow(a, m_exponent); }
846 const Scalar m_exponent;
848 template<
typename Scalar>
856 template<
typename Scalar>
859 inline Scalar operator() (
const Scalar& a)
const {
return m_other / a; }
860 template<
typename Packet>
861 inline const Packet packetOp(
const Packet& a)
const 862 {
return internal::pdiv(pset1<Packet>(m_other),a); }
870 template<
typename Scalar>
873 inline Scalar operator() (
const Scalar& a)
const {
return Scalar(1)/a; }
874 template<
typename Packet>
875 inline const Packet packetOp(
const Packet& a)
const 876 {
return internal::pdiv(pset1<Packet>(
Scalar(1)),a); }
878 template<
typename Scalar>
886 template<
typename Scalar>
889 inline Scalar operator() (
const Scalar& a)
const {
return a*a; }
890 template<
typename Packet>
891 inline const Packet packetOp(
const Packet& a)
const 892 {
return internal::pmul(a,a); }
894 template<
typename Scalar>
902 template<
typename Scalar>
905 inline Scalar operator() (
const Scalar& a)
const {
return a*a*a; }
906 template<
typename Packet>
907 inline const Packet packetOp(
const Packet& a)
const 908 {
return internal::pmul(a,pmul(a,a)); }
910 template<
typename Scalar>
938 {
enum { Cost = 1, PacketAccess =
false }; };
942 {
enum { Cost = 1, PacketAccess =
false }; };
946 {
enum { Cost = 1, PacketAccess =
false }; };
950 {
enum { Cost = 1, PacketAccess =
false }; };
954 {
enum { Cost = 1, PacketAccess =
false }; };
958 {
enum { Cost = 1, PacketAccess =
false }; };
962 {
enum { Cost = 1, PacketAccess =
false }; };
966 {
enum { Cost = 1, PacketAccess =
false }; };
970 {
enum { Cost = 1, PacketAccess =
false }; };
988 #ifdef EIGEN_STDEXT_SUPPORT 990 template<
typename T0,
typename T1>
992 {
enum { Cost = 0, PacketAccess =
false }; };
994 template<
typename T0,
typename T1>
996 {
enum { Cost = 0, PacketAccess =
false }; };
998 template<
typename T0,
typename T1>
1000 {
enum { Cost = 0, PacketAccess =
false }; };
1002 template<
typename T0,
typename T1>
1004 {
enum { Cost = 0, PacketAccess =
false }; };
1006 template<
typename T0,
typename T1>
1010 template<
typename T0,
typename T1,
typename T2>
1014 #endif // EIGEN_STDEXT_SUPPORT 1018 #ifdef EIGEN_FUNCTORS_PLUGIN 1019 #include EIGEN_FUNCTORS_PLUGIN 1026 #endif // EIGEN_FUNCTORS_H Definition: Functors.h:696
Definition: Functors.h:368
Definition: Functors.h:419
Definition: Functors.h:857
Definition: Functors.h:480
Definition: ForwardDeclarations.h:151
Definition: Functors.h:744
Definition: Functors.h:903
Definition: Functors.h:802
Definition: Functors.h:24
Definition: Functors.h:172
Definition: Functors.h:310
iterative scaling algorithm to equilibrate rows and column norms in matrices
Definition: TestIMU_Common.h:87
Definition: Functors.h:389
Definition: TypeSafeIdHash.h:44
Definition: Functors.h:689
Holds information about the various numeric (i.e.
Definition: NumTraits.h:88
Definition: Functors.h:464
Definition: Functors.h:434
Definition: Functors.h:726
Definition: Functors.h:449
Definition: Functors.h:266
Definition: GenericPacketMath.h:71
Definition: Functors.h:235
Definition: Functors.h:47
Definition: Functors.h:580
Definition: Functors.h:519
Definition: Functors.h:208
Definition: Functors.h:887
Definition: Functors.h:351
Definition: Functors.h:539
Definition: Functors.h:404
Definition: Functors.h:821
Definition: Functors.h:251
Definition: BandTriangularSolver.h:13
Definition: Functors.h:104
Definition: Functors.h:841
Definition: Functors.h:647
Definition: XprHelper.h:89
Definition: Functors.h:504
Definition: Functors.h:763
Definition: Functors.h:571
Definition: Functors.h:188
Definition: Functors.h:150
Definition: hash_map.h:22
Definition: Functors.h:75
Definition: Functors.h:871
Definition: Functors.h:708
double Scalar
Common scalar type.
Definition: FlexibleKalmanBase.h:48
Definition: Functors.h:127
Definition: Functors.h:329
Definition: Functors.h:783
Definition: Functors.h:556