123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109 |
- // Boost.Geometry (aka GGL, Generic Geometry Library)
- // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
- // This file was modified by Oracle on 2013-2020.
- // Modifications copyright (c) 2013-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_ALGORITHMS_DETAIL_RELATE_RELATE_IMPL_HPP
- #define BOOST_GEOMETRY_ALGORITHMS_DETAIL_RELATE_RELATE_IMPL_HPP
- #include <type_traits>
- #include <boost/geometry/algorithms/detail/relate/interface.hpp>
- #include <boost/geometry/algorithms/not_implemented.hpp>
- #include <boost/geometry/core/tag.hpp>
- namespace boost { namespace geometry {
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace relate {
- struct implemented_tag {};
- template
- <
- typename Geometry1,
- typename Geometry2
- >
- struct relate_impl_base
- : std::conditional_t
- <
- std::is_base_of
- <
- nyi::not_implemented_tag,
- dispatch::relate<Geometry1, Geometry2>
- >::value,
- not_implemented
- <
- typename geometry::tag<Geometry1>::type,
- typename geometry::tag<Geometry2>::type
- >,
- implemented_tag
- >
- {};
- template
- <
- typename Geometry1,
- typename Geometry2,
- typename StaticMask
- >
- struct relate_impl_dispatch
- : relate_impl_base<Geometry1, Geometry2>
- {
- template <typename Strategy>
- static inline bool apply(Geometry1 const& g1, Geometry2 const& g2, Strategy const& strategy)
- {
- typename detail::relate::result_handler_type
- <
- Geometry1,
- Geometry2,
- StaticMask
- >::type handler;
- dispatch::relate<Geometry1, Geometry2>::apply(g1, g2, handler, strategy);
- return handler.result();
- }
- };
- template <typename Geometry1, typename Geometry2>
- struct relate_impl_dispatch<Geometry1, Geometry2, detail::relate::false_mask>
- : relate_impl_base<Geometry1, Geometry2>
- {
- template <typename Strategy>
- static inline bool apply(Geometry1 const& , Geometry2 const& , Strategy const& )
- {
- return false;
- }
- };
- template
- <
- template <typename, typename> class StaticMaskTrait,
- typename Geometry1,
- typename Geometry2
- >
- struct relate_impl
- : relate_impl_dispatch
- <
- Geometry1,
- Geometry2,
- typename StaticMaskTrait<Geometry1, Geometry2>::type
- >
- {};
- }} // namespace detail::relate
- #endif // DOXYGEN_NO_DETAIL
- }} // namespace boost::geometry
- #endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_RELATE_RELATE_IMPL_HPP
|