1// 2// detail/impl/timer_queue_set.ipp 3// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 4// 5// Copyright (c) 2003-2015 Christopher M. Kohlhoff (chris at kohlhoff dot com) 6// 7// Distributed under the Boost Software License, Version 1.0. (See accompanying 8// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) 9// 10 11#ifndef ASIO_DETAIL_IMPL_TIMER_QUEUE_SET_IPP 12#define ASIO_DETAIL_IMPL_TIMER_QUEUE_SET_IPP 13 14 15#include "asio/detail/config.hpp" 16#include "asio/detail/timer_queue_set.hpp" 17 18#include "asio/detail/push_options.hpp" 19 20namespace asio { 21namespace detail { 22 23timer_queue_set::timer_queue_set() 24 : first_(0) 25{ 26} 27 28void timer_queue_set::insert(timer_queue_base* q) 29{ 30 q->next_ = first_; 31 first_ = q; 32} 33 34void timer_queue_set::erase(timer_queue_base* q) 35{ 36 if (first_) 37 { 38 if (q == first_) 39 { 40 first_ = q->next_; 41 q->next_ = 0; 42 return; 43 } 44 45 for (timer_queue_base* p = first_; p->next_; p = p->next_) 46 { 47 if (p->next_ == q) 48 { 49 p->next_ = q->next_; 50 q->next_ = 0; 51 return; 52 } 53 } 54 } 55} 56 57bool timer_queue_set::all_empty() const 58{ 59 for (timer_queue_base* p = first_; p; p = p->next_) 60 if (!p->empty()) 61 return false; 62 return true; 63} 64 65long timer_queue_set::wait_duration_msec(long max_duration) const 66{ 67 long min_duration = max_duration; 68 for (timer_queue_base* p = first_; p; p = p->next_) 69 min_duration = p->wait_duration_msec(min_duration); 70 return min_duration; 71} 72 73long timer_queue_set::wait_duration_usec(long max_duration) const 74{ 75 long min_duration = max_duration; 76 for (timer_queue_base* p = first_; p; p = p->next_) 77 min_duration = p->wait_duration_usec(min_duration); 78 return min_duration; 79} 80 81void timer_queue_set::get_ready_timers(op_queue<operation>& ops) 82{ 83 for (timer_queue_base* p = first_; p; p = p->next_) 84 p->get_ready_timers(ops); 85} 86 87void timer_queue_set::get_all_timers(op_queue<operation>& ops) 88{ 89 for (timer_queue_base* p = first_; p; p = p->next_) 90 p->get_all_timers(ops); 91} 92 93} // namespace detail 94} // namespace asio 95 96#include "asio/detail/pop_options.hpp" 97 98#endif // ASIO_DETAIL_IMPL_TIMER_QUEUE_SET_IPP 99