Home | History | Annotate | Download | only in detail
      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:
     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 
     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 
     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.
     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