File indexing completed on 2025-04-26 08:25:29
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011 #ifndef BOOST_ASIO_CANCEL_AT_HPP
0012 #define BOOST_ASIO_CANCEL_AT_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 <boost/asio/basic_waitable_timer.hpp>
0020 #include <boost/asio/cancellation_type.hpp>
0021 #include <boost/asio/detail/chrono.hpp>
0022 #include <boost/asio/detail/type_traits.hpp>
0023 #include <boost/asio/wait_traits.hpp>
0024
0025 #include <boost/asio/detail/push_options.hpp>
0026
0027 namespace boost {
0028 namespace asio {
0029
0030
0031
0032
0033
0034
0035 template <typename CompletionToken, typename Clock,
0036 typename WaitTraits = boost::asio::wait_traits<Clock>>
0037 class cancel_at_t
0038 {
0039 public:
0040
0041 template <typename T>
0042 cancel_at_t(T&& completion_token, const typename Clock::time_point& expiry,
0043 cancellation_type_t cancel_type = cancellation_type::terminal)
0044 : token_(static_cast<T&&>(completion_token)),
0045 expiry_(expiry),
0046 cancel_type_(cancel_type)
0047 {
0048 }
0049
0050
0051 CompletionToken token_;
0052 typename Clock::time_point expiry_;
0053 cancellation_type_t cancel_type_;
0054 };
0055
0056
0057
0058
0059
0060
0061 template <typename CompletionToken, typename Clock,
0062 typename WaitTraits = boost::asio::wait_traits<Clock>,
0063 typename Executor = any_io_executor>
0064 class cancel_at_timer
0065 {
0066 public:
0067
0068 template <typename T>
0069 cancel_at_timer(T&& completion_token,
0070 basic_waitable_timer<Clock, WaitTraits, Executor>& timer,
0071 const typename Clock::time_point& expiry,
0072 cancellation_type_t cancel_type = cancellation_type::terminal)
0073 : token_(static_cast<T&&>(completion_token)),
0074 timer_(timer),
0075 expiry_(expiry),
0076 cancel_type_(cancel_type)
0077 {
0078 }
0079
0080
0081 CompletionToken token_;
0082 basic_waitable_timer<Clock, WaitTraits, Executor>& timer_;
0083 typename Clock::time_point expiry_;
0084 cancellation_type_t cancel_type_;
0085 };
0086
0087
0088
0089
0090
0091
0092
0093
0094 template <typename Clock, typename WaitTraits = boost::asio::wait_traits<Clock>>
0095 class partial_cancel_at
0096 {
0097 public:
0098
0099 explicit partial_cancel_at(const typename Clock::time_point& expiry,
0100 cancellation_type_t cancel_type = cancellation_type::terminal)
0101 : expiry_(expiry),
0102 cancel_type_(cancel_type)
0103 {
0104 }
0105
0106
0107
0108 template <typename CompletionToken>
0109 BOOST_ASIO_NODISCARD inline
0110 constexpr cancel_at_t<decay_t<CompletionToken>, Clock, WaitTraits>
0111 operator()(CompletionToken&& completion_token) const
0112 {
0113 return cancel_at_t<decay_t<CompletionToken>, Clock, WaitTraits>(
0114 static_cast<CompletionToken&&>(completion_token),
0115 expiry_, cancel_type_);
0116 }
0117
0118
0119 typename Clock::time_point expiry_;
0120 cancellation_type_t cancel_type_;
0121 };
0122
0123
0124
0125
0126
0127
0128
0129
0130 template <typename Clock, typename WaitTraits = boost::asio::wait_traits<Clock>,
0131 typename Executor = any_io_executor>
0132 class partial_cancel_at_timer
0133 {
0134 public:
0135
0136 explicit partial_cancel_at_timer(
0137 basic_waitable_timer<Clock, WaitTraits, Executor>& timer,
0138 const typename Clock::time_point& expiry,
0139 cancellation_type_t cancel_type = cancellation_type::terminal)
0140 : timer_(timer),
0141 expiry_(expiry),
0142 cancel_type_(cancel_type)
0143 {
0144 }
0145
0146
0147
0148 template <typename CompletionToken>
0149 BOOST_ASIO_NODISCARD inline
0150 cancel_at_timer<decay_t<CompletionToken>, Clock, WaitTraits, Executor>
0151 operator()(CompletionToken&& completion_token) const
0152 {
0153 return cancel_at_timer<decay_t<CompletionToken>,
0154 Clock, WaitTraits, Executor>(
0155 static_cast<CompletionToken&&>(completion_token),
0156 timer_, expiry_, cancel_type_);
0157 }
0158
0159
0160 basic_waitable_timer<Clock, WaitTraits, Executor>& timer_;
0161 typename Clock::time_point expiry_;
0162 cancellation_type_t cancel_type_;
0163 };
0164
0165
0166
0167
0168
0169
0170
0171
0172
0173
0174
0175 template <typename Clock, typename Duration>
0176 BOOST_ASIO_NODISCARD inline partial_cancel_at<Clock>
0177 cancel_at(const chrono::time_point<Clock, Duration>& expiry,
0178 cancellation_type_t cancel_type = cancellation_type::terminal)
0179 {
0180 return partial_cancel_at<Clock>(expiry, cancel_type);
0181 }
0182
0183
0184
0185
0186
0187
0188
0189
0190
0191
0192
0193 template <typename Clock, typename WaitTraits,
0194 typename Executor, typename Duration>
0195 BOOST_ASIO_NODISCARD inline partial_cancel_at_timer<Clock, WaitTraits, Executor>
0196 cancel_at(basic_waitable_timer<Clock, WaitTraits, Executor>& timer,
0197 const chrono::time_point<Clock, Duration>& expiry,
0198 cancellation_type_t cancel_type = cancellation_type::terminal)
0199 {
0200 return partial_cancel_at_timer<Clock, WaitTraits, Executor>(
0201 timer, expiry, cancel_type);
0202 }
0203
0204
0205
0206
0207
0208
0209
0210
0211
0212
0213
0214 template <typename CompletionToken, typename Clock, typename Duration>
0215 BOOST_ASIO_NODISCARD inline cancel_at_t<decay_t<CompletionToken>, Clock>
0216 cancel_at(const chrono::time_point<Clock, Duration>& expiry,
0217 CompletionToken&& completion_token)
0218 {
0219 return cancel_at_t<decay_t<CompletionToken>, Clock>(
0220 static_cast<CompletionToken&&>(completion_token),
0221 expiry, cancellation_type::terminal);
0222 }
0223
0224
0225
0226
0227
0228
0229
0230
0231
0232
0233
0234 template <typename CompletionToken, typename Clock, typename Duration>
0235 BOOST_ASIO_NODISCARD inline cancel_at_t<decay_t<CompletionToken>, Clock>
0236 cancel_at(const chrono::time_point<Clock, Duration>& expiry,
0237 cancellation_type_t cancel_type, CompletionToken&& completion_token)
0238 {
0239 return cancel_at_t<decay_t<CompletionToken>, Clock>(
0240 static_cast<CompletionToken&&>(completion_token), expiry, cancel_type);
0241 }
0242
0243
0244
0245
0246
0247
0248
0249
0250
0251
0252
0253 template <typename CompletionToken, typename Clock,
0254 typename WaitTraits, typename Executor, typename Duration>
0255 BOOST_ASIO_NODISCARD inline
0256 cancel_at_timer<decay_t<CompletionToken>, Clock, WaitTraits, Executor>
0257 cancel_at(basic_waitable_timer<Clock, WaitTraits, Executor>& timer,
0258 const chrono::time_point<Clock, Duration>& expiry,
0259 CompletionToken&& completion_token)
0260 {
0261 return cancel_at_timer<decay_t<CompletionToken>, Clock, WaitTraits, Executor>(
0262 static_cast<CompletionToken&&>(completion_token),
0263 timer, expiry, cancellation_type::terminal);
0264 }
0265
0266
0267
0268
0269
0270
0271
0272
0273
0274
0275
0276 template <typename CompletionToken, typename Clock,
0277 typename WaitTraits, typename Executor, typename Duration>
0278 BOOST_ASIO_NODISCARD inline
0279 cancel_at_timer<decay_t<CompletionToken>, Clock, WaitTraits, Executor>
0280 cancel_at(basic_waitable_timer<Clock, WaitTraits, Executor>& timer,
0281 const chrono::time_point<Clock, Duration>& expiry,
0282 cancellation_type_t cancel_type, CompletionToken&& completion_token)
0283 {
0284 return cancel_at_timer<decay_t<CompletionToken>, Clock, WaitTraits, Executor>(
0285 static_cast<CompletionToken&&>(completion_token),
0286 timer, expiry, cancel_type);
0287 }
0288
0289 }
0290 }
0291
0292 #include <boost/asio/detail/pop_options.hpp>
0293
0294 #include <boost/asio/impl/cancel_at.hpp>
0295
0296 #endif