1//
2// detail/reactor_op.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_REACTOR_OP_HPP
12#define ASIO_DETAIL_REACTOR_OP_HPP
13
14
15#include "asio/detail/config.hpp"
16#include "asio/detail/operation.hpp"
17
18#include "asio/detail/push_options.hpp"
19
20namespace asio {
21namespace detail {
22
23class reactor_op
24  : public operation
25{
26public:
27  // The error code to be passed to the completion handler.
28  asio::error_code ec_;
29
30  // The number of bytes transferred, to be passed to the completion handler.
31  std::size_t bytes_transferred_;
32
33  // Perform the operation. Returns true if it is finished.
34  bool perform()
35  {
36    return perform_func_(this);
37  }
38
39protected:
40  typedef bool (*perform_func_type)(reactor_op*);
41
42  reactor_op(perform_func_type perform_func, func_type complete_func)
43    : operation(complete_func),
44      bytes_transferred_(0),
45      perform_func_(perform_func)
46  {
47  }
48
49private:
50  perform_func_type perform_func_;
51};
52
53} // namespace detail
54} // namespace asio
55
56#include "asio/detail/pop_options.hpp"
57
58#endif // ASIO_DETAIL_REACTOR_OP_HPP
59