• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 //
2 // detail/task_io_service_operation.hpp
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_TASK_IO_SERVICE_OPERATION_HPP
12 #define ASIO_DETAIL_TASK_IO_SERVICE_OPERATION_HPP
13 
14 
15 #include "asio/error_code.hpp"
16 #include "asio/detail/handler_tracking.hpp"
17 #include "asio/detail/op_queue.hpp"
18 
19 #include "asio/detail/push_options.hpp"
20 
21 namespace asio {
22 namespace detail {
23 
24 class task_io_service;
25 
26 // Base class for all operations. A function pointer is used instead of virtual
27 // functions to avoid the associated overhead.
28 class task_io_service_operation ASIO_INHERIT_TRACKED_HANDLER
29 {
30 public:
complete(task_io_service & owner,const asio::error_code & ec,std::size_t bytes_transferred)31   void complete(task_io_service& owner,
32       const asio::error_code& ec, std::size_t bytes_transferred)
33   {
34     func_(&owner, this, ec, bytes_transferred);
35   }
36 
destroy()37   void destroy()
38   {
39     func_(0, this, asio::error_code(), 0);
40   }
41 
42 protected:
43   typedef void (*func_type)(task_io_service*,
44       task_io_service_operation*,
45       const asio::error_code&, std::size_t);
46 
task_io_service_operation(func_type func)47   task_io_service_operation(func_type func)
48     : next_(0),
49       func_(func),
50       task_result_(0)
51   {
52   }
53 
54   // Prevents deletion through this type.
~task_io_service_operation()55   ~task_io_service_operation()
56   {
57   }
58 
59 private:
60   friend class op_queue_access;
61   task_io_service_operation* next_;
62   func_type func_;
63 protected:
64   friend class task_io_service;
65   unsigned int task_result_; // Passed into bytes transferred.
66 };
67 
68 } // namespace detail
69 } // namespace asio
70 
71 #include "asio/detail/pop_options.hpp"
72 
73 #endif // ASIO_DETAIL_TASK_IO_SERVICE_OPERATION_HPP
74