Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-09-04 08:41:54

0001 //
0002 // detail/impl/dev_poll_reactor.hpp
0003 // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
0004 //
0005 // Copyright (c) 2003-2025 Christopher M. Kohlhoff (chris at kohlhoff dot com)
0006 //
0007 // Distributed under the Boost Software License, Version 1.0. (See accompanying
0008 // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
0009 //
0010 
0011 #ifndef BOOST_ASIO_DETAIL_IMPL_DEV_POLL_REACTOR_HPP
0012 #define BOOST_ASIO_DETAIL_IMPL_DEV_POLL_REACTOR_HPP
0013 
0014 #if defined(_MSC_VER) && (_MSC_VER >= 1200)
0015 # pragma once
0016 #endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
0017 
0018 #include <boost/asio/detail/config.hpp>
0019 
0020 #if defined(BOOST_ASIO_HAS_DEV_POLL)
0021 
0022 #include <boost/asio/detail/scheduler.hpp>
0023 
0024 #include <boost/asio/detail/push_options.hpp>
0025 
0026 namespace boost {
0027 namespace asio {
0028 namespace detail {
0029 
0030 inline void dev_poll_reactor::post_immediate_completion(
0031     operation* op, bool is_continuation) const
0032 {
0033   scheduler_.post_immediate_completion(op, is_continuation);
0034 }
0035 
0036 template <typename TimeTraits, typename Allocator>
0037 void dev_poll_reactor::add_timer_queue(
0038     timer_queue<TimeTraits, Allocator>& queue)
0039 {
0040   do_add_timer_queue(queue);
0041 }
0042 
0043 template <typename TimeTraits, typename Allocator>
0044 void dev_poll_reactor::remove_timer_queue(
0045     timer_queue<TimeTraits, Allocator>& queue)
0046 {
0047   do_remove_timer_queue(queue);
0048 }
0049 
0050 template <typename TimeTraits, typename Allocator>
0051 void dev_poll_reactor::schedule_timer(
0052     timer_queue<TimeTraits, Allocator>& queue,
0053     const typename TimeTraits::time_type& time,
0054     typename timer_queue<TimeTraits, Allocator>::per_timer_data& timer,
0055     wait_op* op)
0056 {
0057   boost::asio::detail::mutex::scoped_lock lock(mutex_);
0058 
0059   if (shutdown_)
0060   {
0061     scheduler_.post_immediate_completion(op, false);
0062     return;
0063   }
0064 
0065   bool earliest = queue.enqueue_timer(time, timer, op);
0066   scheduler_.work_started();
0067   if (earliest)
0068     interrupter_.interrupt();
0069 }
0070 
0071 template <typename TimeTraits, typename Allocator>
0072 std::size_t dev_poll_reactor::cancel_timer(
0073     timer_queue<TimeTraits, Allocator>& queue,
0074     typename timer_queue<TimeTraits, Allocator>::per_timer_data& timer,
0075     std::size_t max_cancelled)
0076 {
0077   boost::asio::detail::mutex::scoped_lock lock(mutex_);
0078   op_queue<operation> ops;
0079   std::size_t n = queue.cancel_timer(timer, ops, max_cancelled);
0080   lock.unlock();
0081   scheduler_.post_deferred_completions(ops);
0082   return n;
0083 }
0084 
0085 template <typename TimeTraits, typename Allocator>
0086 void dev_poll_reactor::cancel_timer_by_key(
0087     timer_queue<TimeTraits, Allocator>& queue,
0088     typename timer_queue<TimeTraits, Allocator>::per_timer_data* timer,
0089     void* cancellation_key)
0090 {
0091   boost::asio::detail::mutex::scoped_lock lock(mutex_);
0092   op_queue<operation> ops;
0093   queue.cancel_timer_by_key(timer, ops, cancellation_key);
0094   lock.unlock();
0095   scheduler_.post_deferred_completions(ops);
0096 }
0097 
0098 template <typename TimeTraits, typename Allocator>
0099 void dev_poll_reactor::move_timer(timer_queue<TimeTraits, Allocator>& queue,
0100     typename timer_queue<TimeTraits, Allocator>::per_timer_data& target,
0101     typename timer_queue<TimeTraits, Allocator>::per_timer_data& source)
0102 {
0103   boost::asio::detail::mutex::scoped_lock lock(mutex_);
0104   op_queue<operation> ops;
0105   queue.cancel_timer(target, ops);
0106   queue.move_timer(target, source);
0107   lock.unlock();
0108   scheduler_.post_deferred_completions(ops);
0109 }
0110 
0111 } // namespace detail
0112 } // namespace asio
0113 } // namespace boost
0114 
0115 #include <boost/asio/detail/pop_options.hpp>
0116 
0117 #endif // defined(BOOST_ASIO_HAS_DEV_POLL)
0118 
0119 #endif // BOOST_ASIO_DETAIL_IMPL_DEV_POLL_REACTOR_HPP