File indexing completed on 2025-01-30 09:33:43
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011 #ifndef BOOST_ASIO_COMPLETION_CONDITION_HPP
0012 #define BOOST_ASIO_COMPLETION_CONDITION_HPP
0013
0014 #if defined(_MSC_VER) && (_MSC_VER >= 1200)
0015 # pragma once
0016 #endif
0017
0018 #include <boost/asio/detail/config.hpp>
0019 #include <cstddef>
0020
0021 #include <boost/asio/detail/push_options.hpp>
0022
0023 namespace boost {
0024 namespace asio {
0025
0026 namespace detail {
0027
0028
0029 enum default_max_transfer_size_t { default_max_transfer_size = 65536 };
0030
0031
0032
0033 inline std::size_t adapt_completion_condition_result(bool result)
0034 {
0035 return result ? 0 : default_max_transfer_size;
0036 }
0037
0038
0039
0040
0041 inline std::size_t adapt_completion_condition_result(std::size_t result)
0042 {
0043 return result;
0044 }
0045
0046 class transfer_all_t
0047 {
0048 public:
0049 typedef std::size_t result_type;
0050
0051 template <typename Error>
0052 std::size_t operator()(const Error& err, std::size_t)
0053 {
0054 return !!err ? 0 : default_max_transfer_size;
0055 }
0056 };
0057
0058 class transfer_at_least_t
0059 {
0060 public:
0061 typedef std::size_t result_type;
0062
0063 explicit transfer_at_least_t(std::size_t minimum)
0064 : minimum_(minimum)
0065 {
0066 }
0067
0068 template <typename Error>
0069 std::size_t operator()(const Error& err, std::size_t bytes_transferred)
0070 {
0071 return (!!err || bytes_transferred >= minimum_)
0072 ? 0 : default_max_transfer_size;
0073 }
0074
0075 private:
0076 std::size_t minimum_;
0077 };
0078
0079 class transfer_exactly_t
0080 {
0081 public:
0082 typedef std::size_t result_type;
0083
0084 explicit transfer_exactly_t(std::size_t size)
0085 : size_(size)
0086 {
0087 }
0088
0089 template <typename Error>
0090 std::size_t operator()(const Error& err, std::size_t bytes_transferred)
0091 {
0092 return (!!err || bytes_transferred >= size_) ? 0 :
0093 (size_ - bytes_transferred < default_max_transfer_size
0094 ? size_ - bytes_transferred : std::size_t(default_max_transfer_size));
0095 }
0096
0097 private:
0098 std::size_t size_;
0099 };
0100
0101 }
0102
0103
0104
0105
0106
0107
0108
0109
0110
0111
0112
0113
0114
0115
0116
0117
0118
0119
0120
0121
0122
0123
0124
0125
0126
0127
0128
0129
0130
0131
0132
0133
0134
0135
0136 #if defined(GENERATING_DOCUMENTATION)
0137 unspecified transfer_all();
0138 #else
0139 inline detail::transfer_all_t transfer_all()
0140 {
0141 return detail::transfer_all_t();
0142 }
0143 #endif
0144
0145
0146
0147
0148
0149
0150
0151
0152
0153
0154
0155
0156
0157
0158
0159
0160
0161
0162
0163
0164
0165
0166
0167
0168
0169
0170 #if defined(GENERATING_DOCUMENTATION)
0171 unspecified transfer_at_least(std::size_t minimum);
0172 #else
0173 inline detail::transfer_at_least_t transfer_at_least(std::size_t minimum)
0174 {
0175 return detail::transfer_at_least_t(minimum);
0176 }
0177 #endif
0178
0179
0180
0181
0182
0183
0184
0185
0186
0187
0188
0189
0190
0191
0192
0193
0194
0195
0196
0197
0198
0199
0200
0201
0202
0203
0204 #if defined(GENERATING_DOCUMENTATION)
0205 unspecified transfer_exactly(std::size_t size);
0206 #else
0207 inline detail::transfer_exactly_t transfer_exactly(std::size_t size)
0208 {
0209 return detail::transfer_exactly_t(size);
0210 }
0211 #endif
0212
0213
0214
0215 }
0216 }
0217
0218 #include <boost/asio/detail/pop_options.hpp>
0219
0220 #endif