00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011 #ifndef ASIO_DEADLINE_TIMER_SERVICE_HPP
00012 #define ASIO_DEADLINE_TIMER_SERVICE_HPP
00013
00014 #if defined(_MSC_VER) && (_MSC_VER >= 1200)
00015 # pragma once
00016 #endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
00017
00018 #include "asio/detail/push_options.hpp"
00019
00020 #include "asio/detail/push_options.hpp"
00021 #include <cstddef>
00022 #include <boost/config.hpp>
00023 #include "asio/detail/pop_options.hpp"
00024
00025 #include "asio/io_service.hpp"
00026 #include "asio/time_traits.hpp"
00027 #include "asio/detail/deadline_timer_service.hpp"
00028 #include "asio/detail/epoll_reactor.hpp"
00029 #include "asio/detail/kqueue_reactor.hpp"
00030 #include "asio/detail/select_reactor.hpp"
00031 #include "asio/detail/service_base.hpp"
00032
00033 namespace asio {
00034
00036 template <typename TimeType,
00037 typename TimeTraits = asio::time_traits<TimeType> >
00038 class deadline_timer_service
00039 #if defined(GENERATING_DOCUMENTATION)
00040 : public asio::io_service::service
00041 #else
00042 : public asio::detail::service_base<
00043 deadline_timer_service<TimeType, TimeTraits> >
00044 #endif
00045 {
00046 public:
00047 #if defined(GENERATING_DOCUMENTATION)
00049 static asio::io_service::id id;
00050 #endif
00051
00053 typedef TimeTraits traits_type;
00054
00056 typedef typename traits_type::time_type time_type;
00057
00059 typedef typename traits_type::duration_type duration_type;
00060
00061 private:
00062
00063 #if defined(ASIO_HAS_IOCP)
00064 typedef detail::deadline_timer_service<
00065 traits_type, detail::select_reactor<true> > service_impl_type;
00066 #elif defined(ASIO_HAS_EPOLL)
00067 typedef detail::deadline_timer_service<
00068 traits_type, detail::epoll_reactor<false> > service_impl_type;
00069 #elif defined(ASIO_HAS_KQUEUE)
00070 typedef detail::deadline_timer_service<
00071 traits_type, detail::kqueue_reactor<false> > service_impl_type;
00072 #else
00073 typedef detail::deadline_timer_service<
00074 traits_type, detail::select_reactor<false> > service_impl_type;
00075 #endif
00076
00077 public:
00079 #if defined(GENERATING_DOCUMENTATION)
00080 typedef implementation_defined implementation_type;
00081 #else
00082 typedef typename service_impl_type::implementation_type implementation_type;
00083 #endif
00084
00086 explicit deadline_timer_service(asio::io_service& io_service)
00087 : asio::detail::service_base<
00088 deadline_timer_service<TimeType, TimeTraits> >(io_service),
00089 service_impl_(asio::use_service<service_impl_type>(io_service))
00090 {
00091 }
00092
00094 void shutdown_service()
00095 {
00096 }
00097
00099 void construct(implementation_type& impl)
00100 {
00101 service_impl_.construct(impl);
00102 }
00103
00105 void destroy(implementation_type& impl)
00106 {
00107 service_impl_.destroy(impl);
00108 }
00109
00111 std::size_t cancel(implementation_type& impl, asio::error_code& ec)
00112 {
00113 return service_impl_.cancel(impl, ec);
00114 }
00115
00117 time_type expires_at(const implementation_type& impl) const
00118 {
00119 return service_impl_.expires_at(impl);
00120 }
00121
00123 std::size_t expires_at(implementation_type& impl,
00124 const time_type& expiry_time, asio::error_code& ec)
00125 {
00126 return service_impl_.expires_at(impl, expiry_time, ec);
00127 }
00128
00130 duration_type expires_from_now(const implementation_type& impl) const
00131 {
00132 return service_impl_.expires_from_now(impl);
00133 }
00134
00136 std::size_t expires_from_now(implementation_type& impl,
00137 const duration_type& expiry_time, asio::error_code& ec)
00138 {
00139 return service_impl_.expires_from_now(impl, expiry_time, ec);
00140 }
00141
00142
00143 void wait(implementation_type& impl, asio::error_code& ec)
00144 {
00145 service_impl_.wait(impl, ec);
00146 }
00147
00148
00149 template <typename WaitHandler>
00150 void async_wait(implementation_type& impl, WaitHandler handler)
00151 {
00152 service_impl_.async_wait(impl, handler);
00153 }
00154
00155 private:
00156
00157 service_impl_type& service_impl_;
00158 };
00159
00160 }
00161
00162 #include "asio/detail/pop_options.hpp"
00163
00164 #endif // ASIO_DEADLINE_TIMER_SERVICE_HPP