1 // Boost.Geometry (aka GGL, Generic Geometry Library)
3 // Copyright (c) 2015, Oracle and/or its affiliates.
5 // Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
7 // Licensed under the Boost Software License version 1.0.
8 // http://www.boost.org/users/license.html
10 #ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_SWEEP_HPP
11 #define BOOST_GEOMETRY_ALGORITHMS_DETAIL_SWEEP_HPP
13 #include <boost/core/ignore_unused.hpp>
16 namespace boost { namespace geometry
19 #ifndef DOXYGEN_NO_DETAIL
20 namespace detail { namespace sweep
23 struct no_interrupt_policy
25 static bool const enabled = false;
27 template <typename Event>
28 static inline bool apply(Event const&)
34 }} // namespace detail::sweep
35 #endif // DOXYGEN_NO_DETAIL
41 typename PriorityQueue,
42 typename InitializationVisitor,
43 typename EventVisitor,
44 typename InterruptPolicy
46 inline void sweep(Range const& range, PriorityQueue& queue,
47 InitializationVisitor& initialization_visitor,
48 EventVisitor& event_visitor,
49 InterruptPolicy const& interrupt_policy)
51 typedef typename PriorityQueue::value_type event_type;
53 initialization_visitor.apply(range, queue, event_visitor);
54 while (! queue.empty())
56 event_type event = queue.top();
58 event_visitor.apply(event, queue);
59 if (interrupt_policy.enabled && interrupt_policy.apply(event))
65 boost::ignore_unused(interrupt_policy);
72 typename PriorityQueue,
73 typename InitializationVisitor,
76 inline void sweep(Range const& range, PriorityQueue& queue,
77 InitializationVisitor& initialization_visitor,
78 EventVisitor& event_visitor)
80 sweep(range, queue, initialization_visitor, event_visitor,
81 detail::sweep::no_interrupt_policy());
85 }} // namespace boost::geometry
87 #endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_SWEEP_HPP