Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011 #ifndef ASIO_WINDOWS_RANDOM_ACCESS_HANDLE_SERVICE_HPP
00012 #define ASIO_WINDOWS_RANDOM_ACCESS_HANDLE_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 <boost/cstdint.hpp>
00024 #include "asio/detail/pop_options.hpp"
00025
00026 #include "asio/error.hpp"
00027 #include "asio/io_service.hpp"
00028 #include "asio/detail/service_base.hpp"
00029 #include "asio/detail/win_iocp_handle_service.hpp"
00030
00031 #if !defined(ASIO_DISABLE_WINDOWS_RANDOM_ACCESS_HANDLE)
00032 # if defined(ASIO_HAS_IOCP)
00033 # define ASIO_HAS_WINDOWS_RANDOM_ACCESS_HANDLE 1
00034 # endif // defined(ASIO_HAS_IOCP)
00035 #endif // !defined(ASIO_DISABLE_WINDOWS_RANDOM_ACCESS_HANDLE)
00036
00037 #if defined(ASIO_HAS_WINDOWS_RANDOM_ACCESS_HANDLE) \
00038 || defined(GENERATING_DOCUMENTATION)
00039
00040 namespace asio {
00041 namespace windows {
00042
00044 class random_access_handle_service
00045 #if defined(GENERATING_DOCUMENTATION)
00046 : public asio::io_service::service
00047 #else
00048 : public asio::detail::service_base<random_access_handle_service>
00049 #endif
00050 {
00051 public:
00052 #if defined(GENERATING_DOCUMENTATION)
00053
00054 static asio::io_service::id id;
00055 #endif
00056
00057 private:
00058
00059 typedef detail::win_iocp_handle_service service_impl_type;
00060
00061 public:
00063 #if defined(GENERATING_DOCUMENTATION)
00064 typedef implementation_defined implementation_type;
00065 #else
00066 typedef service_impl_type::implementation_type implementation_type;
00067 #endif
00068
00070 #if defined(GENERATING_DOCUMENTATION)
00071 typedef implementation_defined native_type;
00072 #else
00073 typedef service_impl_type::native_type native_type;
00074 #endif
00075
00077 explicit random_access_handle_service(asio::io_service& io_service)
00078 : asio::detail::service_base<
00079 random_access_handle_service>(io_service),
00080 service_impl_(asio::use_service<service_impl_type>(io_service))
00081 {
00082 }
00083
00085 void shutdown_service()
00086 {
00087 }
00088
00090 void construct(implementation_type& impl)
00091 {
00092 service_impl_.construct(impl);
00093 }
00094
00096 void destroy(implementation_type& impl)
00097 {
00098 service_impl_.destroy(impl);
00099 }
00100
00102 asio::error_code assign(implementation_type& impl,
00103 const native_type& native_handle, asio::error_code& ec)
00104 {
00105 return service_impl_.assign(impl, native_handle, ec);
00106 }
00107
00109 bool is_open(const implementation_type& impl) const
00110 {
00111 return service_impl_.is_open(impl);
00112 }
00113
00115 asio::error_code close(implementation_type& impl,
00116 asio::error_code& ec)
00117 {
00118 return service_impl_.close(impl, ec);
00119 }
00120
00122 native_type native(implementation_type& impl)
00123 {
00124 return service_impl_.native(impl);
00125 }
00126
00128 asio::error_code cancel(implementation_type& impl,
00129 asio::error_code& ec)
00130 {
00131 return service_impl_.cancel(impl, ec);
00132 }
00133
00135 template <typename ConstBufferSequence>
00136 std::size_t write_some_at(implementation_type& impl, boost::uint64_t offset,
00137 const ConstBufferSequence& buffers, asio::error_code& ec)
00138 {
00139 return service_impl_.write_some_at(impl, offset, buffers, ec);
00140 }
00141
00143 template <typename ConstBufferSequence, typename WriteHandler>
00144 void async_write_some_at(implementation_type& impl, boost::uint64_t offset,
00145 const ConstBufferSequence& buffers, WriteHandler handler)
00146 {
00147 service_impl_.async_write_some_at(impl, offset, buffers, handler);
00148 }
00149
00151 template <typename MutableBufferSequence>
00152 std::size_t read_some_at(implementation_type& impl, boost::uint64_t offset,
00153 const MutableBufferSequence& buffers, asio::error_code& ec)
00154 {
00155 return service_impl_.read_some_at(impl, offset, buffers, ec);
00156 }
00157
00159 template <typename MutableBufferSequence, typename ReadHandler>
00160 void async_read_some_at(implementation_type& impl, boost::uint64_t offset,
00161 const MutableBufferSequence& buffers, ReadHandler handler)
00162 {
00163 service_impl_.async_read_some_at(impl, offset, buffers, handler);
00164 }
00165
00166 private:
00167
00168 service_impl_type& service_impl_;
00169 };
00170
00171 }
00172 }
00173
00174 #endif // defined(ASIO_HAS_WINDOWS_RANDOM_ACCESS_HANDLE)
00175
00176
00177 #include "asio/detail/pop_options.hpp"
00178
00179 #endif // ASIO_WINDOWS_RANDOM_ACCESS_HANDLE_SERVICE_HPP