Lines Matching refs:Scalar

24 template<typename Scalar> struct scalar_sum_op {
26 EIGEN_STRONG_INLINE const Scalar operator() (const Scalar& a, const Scalar& b) const { return a + b; }
31 EIGEN_STRONG_INLINE const Scalar predux(const Packet& a) const
34 template<typename Scalar>
35 struct functor_traits<scalar_sum_op<Scalar> > {
37 Cost = NumTraits<Scalar>::AddCost,
38 PacketAccess = packet_traits<Scalar>::HasAdd
104 template<typename Scalar> struct scalar_min_op {
106 EIGEN_STRONG_INLINE const Scalar operator() (const Scalar& a, const Scalar& b) const { using std::min; return (min)(a, b); }
111 EIGEN_STRONG_INLINE const Scalar predux(const Packet& a) const
114 template<typename Scalar>
115 struct functor_traits<scalar_min_op<Scalar> > {
117 Cost = NumTraits<Scalar>::AddCost,
118 PacketAccess = packet_traits<Scalar>::HasMin
127 template<typename Scalar> struct scalar_max_op {
129 EIGEN_STRONG_INLINE const Scalar operator() (const Scalar& a, const Scalar& b) const { using std::max; return (max)(a, b); }
134 EIGEN_STRONG_INLINE const Scalar predux(const Packet& a) const
137 template<typename Scalar>
138 struct functor_traits<scalar_max_op<Scalar> > {
140 Cost = NumTraits<Scalar>::AddCost,
141 PacketAccess = packet_traits<Scalar>::HasMax
150 template<typename Scalar> struct scalar_hypot_op {
152 // typedef typename NumTraits<Scalar>::Real result_type;
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);
160 Scalar qp = q/p;
161 return p * sqrt(Scalar(1) + qp*qp);
164 template<typename Scalar>
165 struct functor_traits<scalar_hypot_op<Scalar> > {
166 enum { Cost = 5 * NumTraits<Scalar>::MulCost, PacketAccess=0 };
172 template<typename Scalar, typename OtherScalar> struct scalar_binary_pow_op {
174 inline Scalar operator() (const Scalar& a, const OtherScalar& b) const { return numext::pow(a, b); }
176 template<typename Scalar, typename OtherScalar>
177 struct functor_traits<scalar_binary_pow_op<Scalar,OtherScalar> > {
178 enum { Cost = 5 * NumTraits<Scalar>::MulCost, PacketAccess = false };
188 template<typename Scalar> struct scalar_difference_op {
190 EIGEN_STRONG_INLINE const Scalar operator() (const Scalar& a, const Scalar& b) const { return a - b; }
195 template<typename Scalar>
196 struct functor_traits<scalar_difference_op<Scalar> > {
198 Cost = NumTraits<Scalar>::AddCost,
199 PacketAccess = packet_traits<Scalar>::HasSub
269 template<typename Scalar> struct scalar_opposite_op {
271 EIGEN_STRONG_INLINE const Scalar operator() (const Scalar& a) const { return -a; }
276 template<typename Scalar>
277 struct functor_traits<scalar_opposite_op<Scalar> >
279 Cost = NumTraits<Scalar>::AddCost,
280 PacketAccess = packet_traits<Scalar>::HasNegate };
288 template<typename Scalar> struct scalar_abs_op {
290 typedef typename NumTraits<Scalar>::Real result_type;
291 EIGEN_STRONG_INLINE const result_type operator() (const Scalar& a) const { using std::abs; return abs(a); }
296 template<typename Scalar>
297 struct functor_traits<scalar_abs_op<Scalar> >
300 Cost = NumTraits<Scalar>::AddCost,
301 PacketAccess = packet_traits<Scalar>::HasAbs
310 template<typename Scalar> struct scalar_abs2_op {
312 typedef typename NumTraits<Scalar>::Real result_type;
313 EIGEN_STRONG_INLINE const result_type operator() (const Scalar& a) const { return numext::abs2(a); }
318 template<typename Scalar>
319 struct functor_traits<scalar_abs2_op<Scalar> >
320 { enum { Cost = NumTraits<Scalar>::MulCost, PacketAccess = packet_traits<Scalar>::HasAbs2 }; };
327 template<typename Scalar> struct scalar_conjugate_op {
329 EIGEN_STRONG_INLINE const Scalar operator() (const Scalar& a) const { using numext::conj; return conj(a); }
333 template<typename Scalar>
334 struct functor_traits<scalar_conjugate_op<Scalar> >
337 Cost = NumTraits<Scalar>::IsComplex ? NumTraits<Scalar>::AddCost : 0,
338 PacketAccess = packet_traits<Scalar>::HasConj
347 template<typename Scalar, typename NewType>
351 EIGEN_STRONG_INLINE const NewType operator() (const Scalar& a) const { return cast<Scalar, NewType>(a); }
353 template<typename Scalar, typename NewType>
354 struct functor_traits<scalar_cast_op<Scalar,NewType> >
355 { enum { Cost = is_same<Scalar, NewType>::value ? 0 : NumTraits<NewType>::AddCost, PacketAccess = false }; };
362 template<typename Scalar>
365 typedef typename NumTraits<Scalar>::Real result_type;
366 EIGEN_STRONG_INLINE result_type operator() (const Scalar& a) const { return numext::real(a); }
368 template<typename Scalar>
369 struct functor_traits<scalar_real_op<Scalar> >
377 template<typename Scalar>
380 typedef typename NumTraits<Scalar>::Real result_type;
381 EIGEN_STRONG_INLINE result_type operator() (const Scalar& a) const { return numext::imag(a); }
383 template<typename Scalar>
384 struct functor_traits<scalar_imag_op<Scalar> >
392 template<typename Scalar>
395 typedef typename NumTraits<Scalar>::Real result_type;
396 EIGEN_STRONG_INLINE result_type& operator() (const Scalar& a) const { return numext::real_ref(*const_cast<Scalar*>(&a)); }
398 template<typename Scalar>
399 struct functor_traits<scalar_real_ref_op<Scalar> >
407 template<typename Scalar>
410 typedef typename NumTraits<Scalar>::Real result_type;
411 EIGEN_STRONG_INLINE result_type& operator() (const Scalar& a) const { return numext::imag_ref(*const_cast<Scalar*>(&a)); }
413 template<typename Scalar>
414 struct functor_traits<scalar_imag_ref_op<Scalar> >
423 template<typename Scalar> struct scalar_exp_op {
425 inline const Scalar operator() (const Scalar& a) const { using std::exp; return exp(a); }
426 typedef typename packet_traits<Scalar>::type Packet;
429 template<typename Scalar>
430 struct functor_traits<scalar_exp_op<Scalar> >
431 { enum { Cost = 5 * NumTraits<Scalar>::MulCost, PacketAccess = packet_traits<Scalar>::HasExp }; };
439 template<typename Scalar> struct scalar_log_op {
441 inline const Scalar operator() (const Scalar& a) const { using std::log; return log(a); }
442 typedef typename packet_traits<Scalar>::type Packet;
445 template<typename Scalar>
446 struct functor_traits<scalar_log_op<Scalar> >
447 { enum { Cost = 5 * NumTraits<Scalar>::MulCost, PacketAccess = packet_traits<Scalar>::HasLog }; };
462 template<typename Scalar>
464 typedef typename packet_traits<Scalar>::type Packet;
467 EIGEN_STRONG_INLINE scalar_multiple_op(const Scalar& other) : m_other(other) { }
468 EIGEN_STRONG_INLINE Scalar operator() (const Scalar& a) const { return a * m_other; }
471 typename add_const_on_value_type<typename NumTraits<Scalar>::Nested>::type m_other;
473 template<typename Scalar>
474 struct functor_traits<scalar_multiple_op<Scalar> >
475 { enum { Cost = NumTraits<Scalar>::MulCost, PacketAccess = packet_traits<Scalar>::HasMul }; };
497 template<typename Scalar>
499 typedef typename packet_traits<Scalar>::type Packet;
502 EIGEN_STRONG_INLINE scalar_quotient1_op(const Scalar& other) : m_other(other) {}
503 EIGEN_STRONG_INLINE Scalar operator() (const Scalar& a) const { return a / m_other; }
506 typename add_const_on_value_type<typename NumTraits<Scalar>::Nested>::type m_other;
508 template<typename Scalar>
509 struct functor_traits<scalar_quotient1_op<Scalar> >
510 { enum { Cost = 2 * NumTraits<Scalar>::MulCost, PacketAccess = packet_traits<Scalar>::HasDiv }; };
514 template<typename Scalar>
516 typedef typename packet_traits<Scalar>::type Packet;
518 EIGEN_STRONG_INLINE scalar_constant_op(const Scalar& other) : m_other(other) { }
520 EIGEN_STRONG_INLINE const Scalar operator() (Index, Index = 0) const { return m_other; }
523 const Scalar m_other;
525 template<typename Scalar>
526 struct functor_traits<scalar_constant_op<Scalar> >
528 { enum { Cost = 1, PacketAccess = packet_traits<Scalar>::Vectorizable, IsRepeatable = true }; };
530 template<typename Scalar> struct scalar_identity_op {
533 EIGEN_STRONG_INLINE const Scalar operator() (Index row, Index col) const { return row==col ? Scalar(1) : Scalar(0); }
535 template<typename Scalar>
536 struct functor_traits<scalar_identity_op<Scalar> >
537 { enum { Cost = NumTraits<Scalar>::AddCost, PacketAccess = false, IsRepeatable = true }; };
539 template <typename Scalar, bool RandomAccess> struct linspaced_op_impl;
549 template <typename Scalar>
550 struct linspaced_op_impl<Scalar,false>
552 typedef typename packet_traits<Scalar>::type Packet;
554 linspaced_op_impl(const Scalar& low, const Scalar& step) :
556 m_packetStep(pset1<Packet>(packet_traits<Scalar>::size*step)),
557 m_base(padd(pset1<Packet>(low), pmul(pset1<Packet>(step),plset<Scalar>(-packet_traits<Scalar>::size)))) {}
560 EIGEN_STRONG_INLINE const Scalar operator() (Index i) const
563 return m_low+Scalar(i)*m_step;
569 const Scalar m_low;
570 const Scalar m_step;
578 template <typename Scalar>
579 struct linspaced_op_impl<Scalar,true>
581 typedef typename packet_traits<Scalar>::type Packet;
583 linspaced_op_impl(const Scalar& low, const Scalar& step) :
585 m_lowPacket(pset1<Packet>(m_low)), m_stepPacket(pset1<Packet>(m_step)), m_interPacket(plset<Scalar>(0)) {}
588 EIGEN_STRONG_INLINE const Scalar operator() (Index i) const { return m_low+i*m_step; }
592 { return internal::padd(m_lowPacket, pmul(m_stepPacket, padd(pset1<Packet>(Scalar(i)),m_interPacket))); }
594 const Scalar m_low;
595 const Scalar m_step;
606 template <typename Scalar, bool RandomAccess = true> struct linspaced_op;
607 template <typename Scalar, bool RandomAccess> struct functor_traits< linspaced_op<Scalar,RandomAccess> >
608 { enum { Cost = 1, PacketAccess = packet_traits<Scalar>::HasSetLinear, IsRepeatable = true }; };
609 template <typename Scalar, bool RandomAccess> struct linspaced_op
611 typedef typename packet_traits<Scalar>::type Packet;
612 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))) {}
615 EIGEN_STRONG_INLINE const Scalar operator() (Index i) const { return impl(i); }
620 EIGEN_STRONG_INLINE const Scalar operator() (Index row, Index col) const
641 const linspaced_op_impl<Scalar,RandomAccess> impl;
649 template<typename Scalar> struct functor_has_linear_access<scalar_identity_op<Scalar> > { enum { ret = 0 }; };
666 template<typename Scalar>
668 typedef typename packet_traits<Scalar>::type Packet;
671 inline scalar_add_op(const Scalar& other) : m_other(other) { }
672 inline Scalar operator() (const Scalar& a) const { return a + m_other; }
675 const Scalar m_other;
677 template<typename Scalar>
678 struct functor_traits<scalar_add_op<Scalar> >
679 { enum { Cost = NumTraits<Scalar>::AddCost, PacketAccess = packet_traits<Scalar>::HasAdd }; };
685 template<typename Scalar> struct scalar_sqrt_op {
687 inline const Scalar operator() (const Scalar& a) const { using std::sqrt; return sqrt(a); }
688 typedef typename packet_traits<Scalar>::type Packet;
691 template<typename Scalar>
692 struct functor_traits<scalar_sqrt_op<Scalar> >
694 Cost = 5 * NumTraits<Scalar>::MulCost,
695 PacketAccess = packet_traits<Scalar>::HasSqrt
703 template<typename Scalar> struct scalar_cos_op {
705 inline Scalar operator() (const Scalar& a) const { using std::cos; return cos(a); }
706 typedef typename packet_traits<Scalar>::type Packet;
709 template<typename Scalar>
710 struct functor_traits<scalar_cos_op<Scalar> >
713 Cost = 5 * NumTraits<Scalar>::MulCost,
714 PacketAccess = packet_traits<Scalar>::HasCos
722 template<typename Scalar> struct scalar_sin_op {
724 inline const Scalar operator() (const Scalar& a) const { using std::sin; return sin(a); }
725 typedef typename packet_traits<Scalar>::type Packet;
728 template<typename Scalar>
729 struct functor_traits<scalar_sin_op<Scalar> >
732 Cost = 5 * NumTraits<Scalar>::MulCost,
733 PacketAccess = packet_traits<Scalar>::HasSin
742 template<typename Scalar> struct scalar_tan_op {
744 inline const Scalar operator() (const Scalar& a) const { using std::tan; return tan(a); }
745 typedef typename packet_traits<Scalar>::type Packet;
748 template<typename Scalar>
749 struct functor_traits<scalar_tan_op<Scalar> >
752 Cost = 5 * NumTraits<Scalar>::MulCost,
753 PacketAccess = packet_traits<Scalar>::HasTan
761 template<typename Scalar> struct scalar_acos_op {
763 inline const Scalar operator() (const Scalar& a) const { using std::acos; return acos(a); }
764 typedef typename packet_traits<Scalar>::type Packet;
767 template<typename Scalar>
768 struct functor_traits<scalar_acos_op<Scalar> >
771 Cost = 5 * NumTraits<Scalar>::MulCost,
772 PacketAccess = packet_traits<Scalar>::HasACos
780 template<typename Scalar> struct scalar_asin_op {
782 inline const Scalar operator() (const Scalar& a) const { using std::asin; return asin(a); }
783 typedef typename packet_traits<Scalar>::type Packet;
786 template<typename Scalar>
787 struct functor_traits<scalar_asin_op<Scalar> >
790 Cost = 5 * NumTraits<Scalar>::MulCost,
791 PacketAccess = packet_traits<Scalar>::HasASin
799 template<typename Scalar>
803 inline scalar_pow_op(const Scalar& exponent) : m_exponent(exponent) {}
804 inline Scalar operator() (const Scalar& a) const { return numext::pow(a, m_exponent); }
805 const Scalar m_exponent;
807 template<typename Scalar>
808 struct functor_traits<scalar_pow_op<Scalar> >
809 { enum { Cost = 5 * NumTraits<Scalar>::MulCost, PacketAccess = false }; };
815 template<typename Scalar>
817 scalar_inverse_mult_op(const Scalar& other) : m_other(other) {}
818 inline Scalar operator() (const Scalar& a) const { return m_other / a; }
822 Scalar m_other;
829 template<typename Scalar>
832 inline Scalar operator() (const Scalar& a) const { return Scalar(1)/a; }
835 { return internal::pdiv(pset1<Packet>(Scalar(1)),a); }
837 template<typename Scalar>
838 struct functor_traits<scalar_inverse_op<Scalar> >
839 { enum { Cost = NumTraits<Scalar>::MulCost, PacketAccess = packet_traits<Scalar>::HasDiv }; };
845 template<typename Scalar>
848 inline Scalar operator() (const Scalar& a) const { return a*a; }
853 template<typename Scalar>
854 struct functor_traits<scalar_square_op<Scalar> >
855 { enum { Cost = NumTraits<Scalar>::MulCost, PacketAccess = packet_traits<Scalar>::HasMul }; };
861 template<typename Scalar>
864 inline Scalar operator() (const Scalar& a) const { return a*a*a; }
869 template<typename Scalar>
870 struct functor_traits<scalar_cube_op<Scalar> >
871 { enum { Cost = 2*NumTraits<Scalar>::MulCost, PacketAccess = packet_traits<Scalar>::HasMul }; };