1 //
2 // detail/base_from_completion_cond.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_BASE_FROM_COMPLETION_COND_HPP
12 #define ASIO_DETAIL_BASE_FROM_COMPLETION_COND_HPP
13 
14 
15 #include "asio/detail/config.hpp"
16 #include "asio/completion_condition.hpp"
17 
18 #include "asio/detail/push_options.hpp"
19 
20 namespace asio {
21 namespace detail {
22 
23 template <typename CompletionCondition>
24 class base_from_completion_cond
25 {
26 protected:
base_from_completion_cond(CompletionCondition completion_condition)27   explicit base_from_completion_cond(CompletionCondition completion_condition)
28     : completion_condition_(completion_condition)
29   {
30   }
31 
check_for_completion(const asio::error_code & ec,std::size_t total_transferred)32   std::size_t check_for_completion(
33       const asio::error_code& ec,
34       std::size_t total_transferred)
35   {
36     return detail::adapt_completion_condition_result(
37         completion_condition_(ec, total_transferred));
38   }
39 
40 private:
41   CompletionCondition completion_condition_;
42 };
43 
44 template <>
45 class base_from_completion_cond<transfer_all_t>
46 {
47 protected:
base_from_completion_cond(transfer_all_t)48   explicit base_from_completion_cond(transfer_all_t)
49   {
50   }
51 
check_for_completion(const asio::error_code & ec,std::size_t total_transferred)52   static std::size_t check_for_completion(
53       const asio::error_code& ec,
54       std::size_t total_transferred)
55   {
56     return transfer_all_t()(ec, total_transferred);
57   }
58 };
59 
60 } // namespace detail
61 } // namespace asio
62 
63 #include "asio/detail/pop_options.hpp"
64 
65 #endif // ASIO_DETAIL_BASE_FROM_COMPLETION_COND_HPP
66