// Boost.Geometry // Copyright (c) 2017-2020, Oracle and/or its affiliates. // Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_STRATEGY_RELATE_HPP #define BOOST_GEOMETRY_STRATEGY_RELATE_HPP #include #include #include #include #include #include #include #include namespace boost { namespace geometry { namespace strategy { namespace point_in_geometry { #ifndef DOXYGEN_NO_STRATEGY_SPECIALIZATIONS namespace services { template < typename Point, typename Geometry, typename Tag1 = typename tag::type, typename Tag2 = typename tag::type > struct default_strategy : strategy::within::services::default_strategy < Point, Geometry > { typedef typename default_strategy::type within_strategy_type; typedef typename strategy::covered_by::services::default_strategy < Point, Geometry >::type covered_by_strategy_type; static const bool same_strategies = std::is_same::value; BOOST_GEOMETRY_STATIC_ASSERT(same_strategies, "Default within and covered_by strategies not compatible.", within_strategy_type, covered_by_strategy_type); }; template struct default_strategy : strategy::within::services::default_strategy {}; template struct default_strategy : strategy::within::services::default_strategy {}; } // namespace services #endif // DOXYGEN_NO_STRATEGY_SPECIALIZATIONS } // namespace point_in_geometry namespace relate { #ifndef DOXYGEN_NO_DETAIL namespace detail { template struct default_intersection_strategy : strategy::intersection::services::default_strategy < typename cs_tag::type > {}; template struct default_point_in_geometry_strategy : point_in_geometry::services::default_strategy < typename point_type::type, Geometry > {}; } // namespace detail #endif // DOXYGEN_NO_DETAIL #ifndef DOXYGEN_NO_STRATEGY_SPECIALIZATIONS namespace services { template < typename Geometry1, typename Geometry2, int TopDim1 = geometry::topological_dimension::value, int TopDim2 = geometry::topological_dimension::value > struct default_strategy { BOOST_GEOMETRY_STATIC_ASSERT_FALSE( "Not implemented for these types.", Geometry1, Geometry2); }; template struct default_strategy : detail::default_point_in_geometry_strategy {}; template struct default_strategy : detail::default_point_in_geometry_strategy {}; template struct default_strategy : detail::default_point_in_geometry_strategy {}; template struct default_strategy : detail::default_intersection_strategy {}; template struct default_strategy : detail::default_intersection_strategy {}; template struct default_strategy : detail::default_intersection_strategy {}; template struct default_strategy : detail::default_intersection_strategy {}; } // namespace services #endif // DOXYGEN_NO_STRATEGY_SPECIALIZATIONS } // namespace relate } // namespace strategy }} // namespace boost::geometry #endif // BOOST_GEOMETRY_STRATEGY_RELATE_HPP