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 20 namespace asio { 21 namespace detail { 22 23 class reactor_op 24 : public operation 25 { 26 public: 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 39 protected: 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 49 private: 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