123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- // Boost.Geometry (aka GGL, Generic Geometry Library)
- // Copyright (c) 2023 Adam Wulkiewicz, Lodz, Poland.
- // Copyright (c) 2015, Oracle and/or its affiliates.
- // Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
- // Licensed under the Boost Software License version 1.0.
- // http://www.boost.org/users/license.html
- #ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_SWEEP_HPP
- #define BOOST_GEOMETRY_ALGORITHMS_DETAIL_SWEEP_HPP
- #include <boost/geometry/util/condition.hpp>
- #include <boost/core/ignore_unused.hpp>
- namespace boost { namespace geometry
- {
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace sweep
- {
- struct no_interrupt_policy
- {
- static bool const enabled = false;
- template <typename Event>
- static inline bool apply(Event const&)
- {
- return false;
- }
- };
- }} // namespace detail::sweep
- #endif // DOXYGEN_NO_DETAIL
- template
- <
- typename Range,
- typename PriorityQueue,
- typename InitializationVisitor,
- typename EventVisitor,
- typename InterruptPolicy
- >
- inline void sweep(Range const& range, PriorityQueue& queue,
- InitializationVisitor& initialization_visitor,
- EventVisitor& event_visitor,
- InterruptPolicy const& interrupt_policy)
- {
- typedef typename PriorityQueue::value_type event_type;
- initialization_visitor.apply(range, queue, event_visitor);
- while (! queue.empty())
- {
- event_type event = queue.top();
- queue.pop();
- event_visitor.apply(event, queue);
- if (BOOST_GEOMETRY_CONDITION(interrupt_policy.enabled) && interrupt_policy.apply(event))
- {
- break;
- }
- }
- boost::ignore_unused(interrupt_policy);
- }
- template
- <
- typename Range,
- typename PriorityQueue,
- typename InitializationVisitor,
- typename EventVisitor
- >
- inline void sweep(Range const& range, PriorityQueue& queue,
- InitializationVisitor& initialization_visitor,
- EventVisitor& event_visitor)
- {
- sweep(range, queue, initialization_visitor, event_visitor,
- detail::sweep::no_interrupt_policy());
- }
- }} // namespace boost::geometry
- #endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_SWEEP_HPP
|