]> git.proxmox.com Git - ceph.git/blobdiff - ceph/src/boost/boost/geometry/algorithms/detail/relate/relate_impl.hpp
import new upstream nautilus stable release 14.2.8
[ceph.git] / ceph / src / boost / boost / geometry / algorithms / detail / relate / relate_impl.hpp
index 2ec2361c03b184d9d87373c94e77e983ce9df246..ae963c4b036a8452af7a4e96161ed9dc6de6a104 100644 (file)
@@ -2,8 +2,8 @@
 
 // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
 
-// This file was modified by Oracle on 2013, 2014, 2015.
-// Modifications copyright (c) 2013-2015 Oracle and/or its affiliates.
+// This file was modified by Oracle on 2013, 2014, 2015, 2019.
+// Modifications copyright (c) 2013-2019 Oracle and/or its affiliates.
 
 // Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
 
@@ -30,25 +30,19 @@ namespace detail { namespace relate {
 
 struct implemented_tag {};
 
-template <template <typename, typename> class StaticMaskTrait,
-          typename Geometry1,
-          typename Geometry2>
-struct relate_impl
-    : boost::mpl::if_
+template
+<
+    typename Geometry1,
+    typename Geometry2
+>
+struct relate_impl_base
+    : boost::mpl::if_c
         <
-            boost::mpl::or_
+            boost::is_base_of
                 <
-                    boost::is_base_of
-                        <
-                            nyi::not_implemented_tag,
-                            StaticMaskTrait<Geometry1, Geometry2>
-                        >,
-                    boost::is_base_of
-                        <
-                            nyi::not_implemented_tag,
-                            dispatch::relate<Geometry1, Geometry2>
-                        >
-                >,
+                    nyi::not_implemented_tag,
+                    dispatch::relate<Geometry1, Geometry2>
+                >::value,
             not_implemented
                 <
                     typename geometry::tag<Geometry1>::type,
@@ -56,6 +50,16 @@ struct relate_impl
                 >,
             implemented_tag
         >::type
+{};
+
+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)
@@ -64,7 +68,7 @@ struct relate_impl
             <
                 Geometry1,
                 Geometry2,
-                typename StaticMaskTrait<Geometry1, Geometry2>::type
+                StaticMask
             >::type handler;
 
         dispatch::relate<Geometry1, Geometry2>::apply(g1, g2, handler, strategy);
@@ -73,6 +77,32 @@ struct relate_impl
     }
 };
 
+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