FunctorsPlugin.hpp
Go to the documentation of this file.
1 #include <cmath>
2 
3 template<typename Scalar> struct scalar_sum_of_finites_op {
4  EIGEN_EMPTY_STRUCT_CTOR(scalar_sum_of_finites_op)
5  EIGEN_STRONG_INLINE const Scalar operator() (const Scalar& a, const Scalar& b) const {
6  using std::isfinite;
7  if (isfinite(a) && isfinite(b)) return a + b;
8  if (isfinite(a)) return a;
9  if (isfinite(b)) return b;
10  return a + b;
11  }
12 };
13 template<typename Scalar>
14 struct functor_traits<scalar_sum_of_finites_op<Scalar> > {
15  enum {
16  Cost = 2 * NumTraits<Scalar>::ReadCost + NumTraits<Scalar>::AddCost,
17  PacketAccess = false
18  };
19 };
20 
21 template<typename Scalar>
23  EIGEN_EMPTY_STRUCT_CTOR(scalar_min_of_finites_op)
24  EIGEN_STRONG_INLINE const Scalar operator() (const Scalar& a, const Scalar& b) const {
25  using std::min;
26  using std::isfinite;
27  if (isfinite(a) && isfinite(b)) return (min)(a, b);
28  if (isfinite(a)) return a;
29  if (isfinite(b)) return b;
30  return (min)(a, b);
31  }
32 };
33 template<typename Scalar>
34 struct functor_traits<scalar_min_of_finites_op<Scalar> > {
35  enum {
36  Cost = NumTraits<Scalar>::AddCost,
37  PacketAccess = false
38  };
39 };
40 
41 template<typename Scalar>
43  EIGEN_EMPTY_STRUCT_CTOR(scalar_max_of_finites_op)
44  EIGEN_STRONG_INLINE const Scalar operator() (const Scalar& a, const Scalar& b) const {
45  using std::max;
46  using std::isfinite;
47  if (isfinite(a) && isfinite(b)) return (max)(a, b);
48  if (isfinite(a)) return a;
49  if (isfinite(b)) return b;
50  return (max)(a, b);
51  }
52 };
53 template<typename Scalar>
54 struct functor_traits<scalar_max_of_finites_op<Scalar> > {
55  enum {
56  Cost = NumTraits<Scalar>::AddCost,
57  PacketAccess = false
58  };
59 };


grid_map_core
Author(s): Péter Fankhauser
autogenerated on Wed Jul 5 2023 02:23:35