]> git.proxmox.com Git - ceph.git/blobdiff - ceph/src/boost/boost/geometry/strategies/cartesian/envelope_segment.hpp
import new upstream nautilus stable release 14.2.8
[ceph.git] / ceph / src / boost / boost / geometry / strategies / cartesian / envelope_segment.hpp
index a591996b84835caaaf1e062bfd5120d28ca11ad1..cd52775da586bdee1a143fab979e2336ae9ade72 100644 (file)
@@ -1,6 +1,6 @@
 // Boost.Geometry (aka GGL, Generic Geometry Library)
 
-// Copyright (c) 2017 Oracle and/or its affiliates.
+// Copyright (c) 2017-2018 Oracle and/or its affiliates.
 // Contributed and/or modified by Vissarion Fisikopoulos, on behalf of Oracle
 // Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
 
 #ifndef BOOST_GEOMETRY_STRATEGIES_CARTESIAN_ENVELOPE_SEGMENT_HPP
 #define BOOST_GEOMETRY_STRATEGIES_CARTESIAN_ENVELOPE_SEGMENT_HPP
 
+#include <cstddef>
 
-#include <boost/geometry/algorithms/detail/envelope/segment.hpp>
+#include <boost/geometry/core/coordinate_dimension.hpp>
 #include <boost/geometry/core/tags.hpp>
+
+#include <boost/geometry/strategies/cartesian/envelope_point.hpp>
+#include <boost/geometry/strategies/cartesian/expand_point.hpp>
 #include <boost/geometry/strategies/envelope.hpp>
-#include <boost/geometry/util/select_calculation_type.hpp>
 
+namespace boost { namespace geometry { namespace strategy { namespace envelope
+{
 
-namespace boost { namespace geometry
+#ifndef DOXYGEN_NO_DETAIL
+namespace detail
 {
 
-namespace strategy { namespace envelope
+template <std::size_t Dimension, std::size_t DimensionCount>
+struct envelope_one_segment
 {
+    template<typename Point, typename Box>
+    static inline void apply(Point const& p1,
+                             Point const& p2,
+                             Box& mbr)
+    {
+        geometry::detail::envelope::envelope_one_point
+            <
+                Dimension, DimensionCount
+            >::apply(p1, mbr);
+
+        strategy::expand::detail::point_loop
+            <
+                Dimension, DimensionCount
+            >::apply(mbr, p2);
+    }
+};
+
+} // namespace detail
+#endif // DOXYGEN_NO_DETAIL
+
 
 template
 <
@@ -30,21 +57,15 @@ template
 >
 class cartesian_segment
 {
-public :
-
-    template <typename Point1, typename Point2, typename Box>
-    inline void
-    apply(Point1 const& point1, Point2 const& point2, Box& box) const
+public:
+    template <typename Point, typename Box>
+    static inline void apply(Point const& point1, Point const& point2, Box& box)
     {
-        geometry::detail::envelope::envelope_one_segment
-                <
-                    0,
-                    dimension<Point1>::value
-                >
-                ::apply(point1,
-                        point2,
-                        box,
-                        strategy::envelope::cartesian_segment<CalculationType>());
+        strategy::envelope::detail::envelope_one_segment
+            <
+                0,
+                dimension<Point>::value
+            >::apply(point1, point2, box);        
     }
 
 };
@@ -55,7 +76,7 @@ namespace services
 {
 
 template <typename CalculationType>
-struct default_strategy<cartesian_tag, CalculationType>
+struct default_strategy<segment_tag, cartesian_tag, CalculationType>
 {
     typedef strategy::envelope::cartesian_segment<CalculationType> type;
 };