]> git.proxmox.com Git - ceph.git/blobdiff - ceph/src/boost/boost/geometry/views/reversible_view.hpp
update ceph source to reef 18.1.2
[ceph.git] / ceph / src / boost / boost / geometry / views / reversible_view.hpp
index ed65d04e7a27b1fc16cb4f07a1edd31491e3ca02..25b22f8e15e8136cac8fa53d1846257a40d1e99e 100644 (file)
@@ -4,8 +4,8 @@
 // Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
 // Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
 
-// This file was modified by Oracle on 2020.
-// Modifications copyright (c) 2020 Oracle and/or its affiliates.
+// This file was modified by Oracle on 2020-2021.
+// Modifications copyright (c) 2020-2021 Oracle and/or its affiliates.
 // Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
 
 // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
 #include <boost/version.hpp>
 #include <boost/range/adaptor/reversed.hpp>
 
+#include <boost/geometry/core/closure.hpp>
+#include <boost/geometry/core/point_order.hpp>
 #include <boost/geometry/core/ring_type.hpp>
 #include <boost/geometry/core/tag.hpp>
 #include <boost/geometry/core/tags.hpp>
 
+#include <boost/geometry/util/order_as_direction.hpp>
+
 #include <boost/geometry/views/identity_view.hpp>
 
 namespace boost { namespace geometry
 {
 
-/*!
-\brief Flag for iterating a reversible_view in forward or reverse direction
-\ingroup views
-*/
-enum iterate_direction { iterate_forward, iterate_reverse };
+
+#ifndef DOXYGEN_NO_DETAIL
+namespace detail
+{
+
+
+template
+<
+    typename Range,
+    order_selector Order = geometry::point_order<Range>::value
+>
+struct clockwise_view
+    : identity_view<Range>
+{
+    explicit inline clockwise_view(Range& r)
+        : identity_view<Range>(r)
+    {}
+};
+
+template <typename Range>
+struct clockwise_view<Range, counterclockwise>
+    : boost::reversed_range<Range>
+{
+    explicit inline clockwise_view(Range& r)
+        : boost::reversed_range<Range>(r)
+    {}
+};
+
+
+} // namespace detail
+#endif // DOXYGEN_NO_DETAIL
+
 
 /*!
 \brief View on a range, reversing direction if necessary
@@ -47,30 +78,50 @@ template <typename Range, iterate_direction Direction>
 struct reversible_view {};
 
 
-
 #ifndef DOXYGEN_NO_SPECIALIZATIONS
 
 template <typename Range>
 struct reversible_view<Range, iterate_forward>
 {
-    typedef identity_view<Range> type;
+    using type = identity_view<Range>;
 };
 
 
 template <typename Range>
 struct reversible_view<Range, iterate_reverse>
 {
-#if BOOST_VERSION > 104500
-    typedef boost::reversed_range<Range> type;
-#else
-    // For older versions of Boost
-    typedef boost::range_detail::reverse_range<Range> type;
-#endif
+    using type = boost::reversed_range<Range>;
 };
 
 #endif // DOXYGEN_NO_SPECIALIZATIONS
 
 
+#ifndef DOXYGEN_NO_TRAITS_SPECIALIZATIONS
+namespace traits
+{
+
+
+template <typename Range, order_selector Order>
+struct tag<detail::clockwise_view<Range, Order> >
+    : geometry::tag<Range>
+{};
+
+template <typename Range, order_selector Order>
+struct point_order<detail::clockwise_view<Range, Order> >
+{
+    static const order_selector value = clockwise;
+};
+
+template <typename Range, order_selector Order>
+struct closure<detail::clockwise_view<Range, Order> >
+    : geometry::closure<Range>
+{};
+
+
+} // namespace traits
+#endif // DOXYGEN_NO_TRAITS_SPECIALIZATIONS
+
+
 }} // namespace boost::geometry