// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2014, Oracle and/or its affiliates. // Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle // Licensed under the Boost Software License version 1.0. // http://www.boost.org/users/license.html #ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_DISTANCE_LINEAR_OR_AREAL_TO_AREAL_HPP #define BOOST_GEOMETRY_ALGORITHMS_DETAIL_DISTANCE_LINEAR_OR_AREAL_TO_AREAL_HPP #include #include #include #include namespace boost { namespace geometry { #ifndef DOXYGEN_NO_DETAIL namespace detail { namespace distance { template struct linear_to_areal { typedef typename strategy::distance::services::return_type < Strategy, typename point_type::type, typename point_type::type >::type return_type; static inline return_type apply(Linear const& linear, Areal const& areal, Strategy const& strategy) { if ( geometry::intersects(linear, areal) ) { return 0; } return linear_to_linear < Linear, Areal, Strategy >::apply(linear, areal, strategy, false); } static inline return_type apply(Areal const& areal, Linear const& linear, Strategy const& strategy) { return apply(linear, areal, strategy); } }; template struct areal_to_areal { typedef typename strategy::distance::services::return_type < Strategy, typename point_type::type, typename point_type::type >::type return_type; static inline return_type apply(Areal1 const& areal1, Areal2 const& areal2, Strategy const& strategy) { if ( geometry::intersects(areal1, areal2) ) { return 0; } return linear_to_linear < Areal1, Areal2, Strategy >::apply(areal1, areal2, strategy, false); } }; }} // namespace detail::distance #endif // DOXYGEN_NO_DETAIL #ifndef DOXYGEN_NO_DISPATCH namespace dispatch { template struct distance < Linear, Areal, Strategy, linear_tag, areal_tag, strategy_tag_distance_point_segment, false > : detail::distance::linear_to_areal < Linear, Areal, Strategy > {}; template struct distance < Areal, Linear, Strategy, areal_tag, linear_tag, strategy_tag_distance_point_segment, false > : detail::distance::linear_to_areal < Linear, Areal, Strategy > {}; template struct distance < Areal1, Areal2, Strategy, areal_tag, areal_tag, strategy_tag_distance_point_segment, false > : detail::distance::areal_to_areal < Areal1, Areal2, Strategy > {}; } // namespace dispatch #endif // DOXYGEN_NO_DISPATCH }} // namespace boost::geometry #endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_DISTANCE_LINEAR_OR_AREAL_TO_AREAL_HPP