]> git.proxmox.com Git - ceph.git/blobdiff - ceph/src/boost/boost/geometry/algorithms/detail/envelope/range.hpp
update ceph source to reef 18.1.2
[ceph.git] / ceph / src / boost / boost / geometry / algorithms / detail / envelope / range.hpp
index 068685b0ef095c4dc97471e7acee0825d738bf75..4692341e0658e8f76b7a5e0e3bd9e3e1e45b000f 100644 (file)
@@ -4,8 +4,8 @@
 // Copyright (c) 2008-2015 Bruno Lalande, Paris, France.
 // Copyright (c) 2009-2015 Mateusz Loskot, London, UK.
 
-// This file was modified by Oracle on 2015-2020.
-// Modifications copyright (c) 2015-2020, Oracle and/or its affiliates.
+// This file was modified by Oracle on 2015-2021.
+// Modifications copyright (c) 2015-2021, Oracle and/or its affiliates.
 
 // Contributed and/or modified by Vissarion Fysikopoulos, on behalf of Oracle
 // Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
@@ -28,7 +28,7 @@
 #include <boost/range/end.hpp>
 
 #include <boost/geometry/algorithms/is_empty.hpp>
-
+#include <boost/geometry/algorithms/detail/dummy_geometries.hpp>
 #include <boost/geometry/algorithms/detail/envelope/initialize.hpp>
 #include <boost/geometry/algorithms/detail/expand/box.hpp>
 #include <boost/geometry/algorithms/detail/expand/point.hpp>
@@ -47,42 +47,10 @@ namespace detail { namespace envelope
 // implementation for simple ranges
 struct envelope_range
 {
-    template <typename Iterator, typename Box, typename Strategy>
-    static inline void apply(Iterator it,
-                             Iterator last,
-                             Box& mbr,
-                             Strategy const& strategy)
-    {
-        typedef typename std::iterator_traits<Iterator>::value_type value_type;
-
-        // initialize MBR
-        initialize<Box, 0, dimension<Box>::value>::apply(mbr);
-
-        if (it != last)
-        {
-            // initialize box with first element in range
-            dispatch::envelope
-                <
-                    value_type
-                >::apply(*it, mbr, strategy);
-
-            // consider now the remaining elements in the range (if any)
-            for (++it; it != last; ++it)
-            {
-                dispatch::expand
-                    <
-                        Box, value_type
-                    >::apply(mbr, *it, strategy);
-            }
-        }
-    }
-
-    template <typename Range, typename Box, typename Strategy>
-    static inline void apply(Range const& range, Box& mbr, Strategy const& strategy)
+    template <typename Range, typename Box, typename Strategies>
+    static inline void apply(Range const& range, Box& mbr, Strategies const& strategies)
     {
-        using strategy_t = decltype(strategy.envelope(range, mbr));
-        return apply(strategy_t::begin(range), strategy_t::end(range),
-                     mbr, strategy);
+        strategies.envelope(range, mbr).apply(range, mbr);
     }
 };
 
@@ -91,35 +59,32 @@ struct envelope_range
 template <typename EnvelopePolicy>
 struct envelope_multi_range
 {
-    template <typename MultiRange, typename Box, typename Strategy>
+    template <typename MultiRange, typename Box, typename Strategies>
     static inline void apply(MultiRange const& multirange,
                              Box& mbr,
-                             Strategy const& strategy)
+                             Strategies const& strategies)
     {
-        using range_t = typename boost::range_value<MultiRange>::type;
-        using strategy_t = decltype(strategy.envelope(std::declval<range_t>(), mbr));
-        using state_t = typename strategy_t::template multi_state<Box>;
-        apply<state_t>(boost::begin(multirange), boost::end(multirange), mbr, strategy);
+        using strategy_t = decltype(strategies.envelope(multirange, mbr));
+        apply<strategy_t>(multirange, mbr, strategies);
     }
 
-private:
-    template <typename State, typename Iter, typename Box, typename Strategy>
-    static inline void apply(Iter it,
-                             Iter last,
+    template <typename Strategy, typename MultiRange, typename Box, typename Strategies>
+    static inline void apply(MultiRange const& multirange,
                              Box& mbr,
-                             Strategy const& strategy)
+                             Strategies const& strategies)
     {
-        State state;
-        for (; it != last; ++it)
+        typename Strategy::template state<Box> state;
+        auto const end = boost::end(multirange);
+        for (auto it = boost::begin(multirange); it != end; ++it)
         {
             if (! geometry::is_empty(*it))
             {
                 Box helper_mbr;
-                EnvelopePolicy::apply(*it, helper_mbr, strategy);
-                state.apply(helper_mbr);
+                EnvelopePolicy::apply(*it, helper_mbr, strategies);
+                Strategy::apply(state, helper_mbr);
             }
         }
-        state.result(mbr);
+        Strategy::result(state, mbr);
     }
 };