]> git.proxmox.com Git - ceph.git/blobdiff - ceph/src/boost/boost/geometry/views/closeable_view.hpp
update ceph source to reef 18.1.2
[ceph.git] / ceph / src / boost / boost / geometry / views / closeable_view.hpp
index ba5bbd3f89d59ebc9c456e0ef70c4e5ee5bdddfc..08e2f19a7df234f4c107c92a924edcaab259fb8c 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
@@ -19,6 +19,7 @@
 #define BOOST_GEOMETRY_VIEWS_CLOSEABLE_VIEW_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>
 namespace boost { namespace geometry
 {
 
-// Silence warning C4512: assignment operator could not be generated
-#if defined(_MSC_VER)
-#pragma warning(push)
-#pragma warning(disable : 4512)
-#endif
 
 #ifndef DOXYGEN_NO_DETAIL
-
 namespace detail
 {
 
 template <typename Range>
 struct closing_view
 {
+    using iterator = closing_iterator<Range const>;
+    using const_iterator = closing_iterator<Range const>;
+
     // Keep this explicit, important for nested views/ranges
-    explicit inline closing_view(Range& r)
-        : m_range(r)
+    explicit inline closing_view(Range const& r)
+        : m_begin(r)
+        , m_end(r, true)
     {}
 
-    typedef closing_iterator<Range> iterator;
-    typedef closing_iterator<Range const> const_iterator;
+    inline const_iterator begin() const { return m_begin; }
+    inline const_iterator end() const { return m_end; }
+
+private:
+    const_iterator m_begin;
+    const_iterator m_end;
+};
+
 
-    inline const_iterator begin() const { return const_iterator(m_range); }
-    inline const_iterator end() const { return const_iterator(m_range, true); }
+template
+<
+    typename Range,
+    closure_selector Close = geometry::closure<Range>::value
+>
+struct closed_view
+    : identity_view<Range>
+{
+    explicit inline closed_view(Range const& r)
+        : identity_view<Range const>(r)
+    {}
+};
 
-    inline iterator begin() { return iterator(m_range); }
-    inline iterator end() { return iterator(m_range, true); }
-private :
-    Range& m_range;
+template <typename Range>
+struct closed_view<Range, open>
+    : closing_view<Range>
+{
+    explicit inline closed_view(Range const& r)
+        : closing_view<Range const>(r)
+    {}
 };
 
-}
 
+} // namespace detail
 #endif // DOXYGEN_NO_DETAIL
 
 
@@ -87,22 +105,44 @@ struct closeable_view {};
 template <typename Range>
 struct closeable_view<Range, closed>
 {
-    typedef identity_view<Range> type;
+    using type = identity_view<Range>;
 };
 
 
 template <typename Range>
 struct closeable_view<Range, open>
 {
-    typedef detail::closing_view<Range> type;
+    using type = detail::closing_view<Range>;
 };
 
 #endif // DOXYGEN_NO_SPECIALIZATIONS
 
 
-#if defined(_MSC_VER)
-#pragma warning(pop)
-#endif
+#ifndef DOXYGEN_NO_TRAITS_SPECIALIZATIONS
+namespace traits
+{
+
+
+template <typename Range, closure_selector Close>
+struct tag<detail::closed_view<Range, Close> >
+    : geometry::tag<Range>
+{};
+
+template <typename Range, closure_selector Close>
+struct point_order<detail::closed_view<Range, Close> >
+    : geometry::point_order<Range>
+{};
+
+template <typename Range, closure_selector Close>
+struct closure<detail::closed_view<Range, Close> >
+{
+    static const closure_selector value = closed;
+};
+
+
+} // namespace traits
+#endif // DOXYGEN_NO_TRAITS_SPECIALIZATIONS
+
 
 }} // namespace boost::geometry