.. _program_listing_file__tmp_ws_src_grid_map_grid_map_core_include_grid_map_core_eigen_plugins_FunctorsPlugin.hpp: Program Listing for File FunctorsPlugin.hpp =========================================== |exhale_lsh| :ref:`Return to documentation for file ` (``/tmp/ws/src/grid_map/grid_map_core/include/grid_map_core/eigen_plugins/FunctorsPlugin.hpp``) .. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS .. code-block:: cpp #ifndef GRID_MAP_CORE__EIGEN_PLUGINS__FUNCTORSPLUGIN_HPP_ #define GRID_MAP_CORE__EIGEN_PLUGINS__FUNCTORSPLUGIN_HPP_ #include template struct scalar_sum_of_finites_op { EIGEN_EMPTY_STRUCT_CTOR(scalar_sum_of_finites_op) EIGEN_STRONG_INLINE const Scalar operator()(const Scalar & a, const Scalar & b) const { using std::isfinite; if (isfinite(a) && isfinite(b)) {return a + b;} if (isfinite(a)) {return a;} if (isfinite(b)) {return b;} return a + b; } }; template struct functor_traits> { enum { Cost = 2 * NumTraits::ReadCost + NumTraits::AddCost, PacketAccess = false }; }; template struct scalar_min_of_finites_op { EIGEN_EMPTY_STRUCT_CTOR(scalar_min_of_finites_op) EIGEN_STRONG_INLINE const Scalar operator()(const Scalar & a, const Scalar & b) const { using std::min; using std::isfinite; if (isfinite(a) && isfinite(b)) {return (min)(a, b);} if (isfinite(a)) {return a;} if (isfinite(b)) {return b;} return (min)(a, b); } }; template struct functor_traits> { enum { Cost = NumTraits::AddCost, PacketAccess = false }; }; template struct scalar_max_of_finites_op { EIGEN_EMPTY_STRUCT_CTOR(scalar_max_of_finites_op) EIGEN_STRONG_INLINE const Scalar operator()(const Scalar & a, const Scalar & b) const { using std::max; using std::isfinite; if (isfinite(a) && isfinite(b)) {return (max)(a, b);} if (isfinite(a)) {return a;} if (isfinite(b)) {return b;} return (max)(a, b); } }; template struct functor_traits> { enum { Cost = NumTraits::AddCost, PacketAccess = false }; }; #endif // GRID_MAP_CORE__EIGEN_PLUGINS__FUNCTORSPLUGIN_HPP_