mirror of
https://github.com/boostorg/beast.git
synced 2025-07-30 12:57:31 +02:00
Don't copy completion handlers:
All asynchronous operations will now be able to use move-only CompletionHandlers. Signed-off-by: Damian Jarek <damian.jarek93@gmail.com>
This commit is contained in:
committed by
Vinnie Falco
parent
3361df142c
commit
200e898f7e
@ -5,6 +5,7 @@ Version 149:
|
|||||||
* Fix CMakeLists.txt variable
|
* Fix CMakeLists.txt variable
|
||||||
* Protect calls from macros
|
* Protect calls from macros
|
||||||
* pausation always allocates
|
* pausation always allocates
|
||||||
|
* Don't copy completion handlers
|
||||||
|
|
||||||
--------------------------------------------------------------------------------
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
@ -109,7 +109,7 @@ public:
|
|||||||
boost::asio::associated_allocator_t<Handler>;
|
boost::asio::associated_allocator_t<Handler>;
|
||||||
|
|
||||||
bound_handler(bound_handler&&) = default;
|
bound_handler(bound_handler&&) = default;
|
||||||
bound_handler(bound_handler const&) = default;
|
bound_handler(bound_handler const&) = delete;
|
||||||
|
|
||||||
template<class DeducedHandler>
|
template<class DeducedHandler>
|
||||||
explicit
|
explicit
|
||||||
|
@ -37,7 +37,7 @@ class buffered_read_stream<
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
read_some_op(read_some_op&&) = default;
|
read_some_op(read_some_op&&) = default;
|
||||||
read_some_op(read_some_op const&) = default;
|
read_some_op(read_some_op const&) = delete;
|
||||||
|
|
||||||
template<class DeducedHandler, class... Args>
|
template<class DeducedHandler, class... Args>
|
||||||
read_some_op(DeducedHandler&& h,
|
read_some_op(DeducedHandler&& h,
|
||||||
@ -237,7 +237,7 @@ async_read_some(
|
|||||||
void(error_code, std::size_t)> init{handler};
|
void(error_code, std::size_t)> init{handler};
|
||||||
read_some_op<MutableBufferSequence, BOOST_ASIO_HANDLER_TYPE(
|
read_some_op<MutableBufferSequence, BOOST_ASIO_HANDLER_TYPE(
|
||||||
ReadHandler, void(error_code, std::size_t))>{
|
ReadHandler, void(error_code, std::size_t))>{
|
||||||
init.completion_handler, *this, buffers}(
|
std::move(init.completion_handler), *this, buffers}(
|
||||||
error_code{}, 0);
|
error_code{}, 0);
|
||||||
return init.result.get();
|
return init.result.get();
|
||||||
}
|
}
|
||||||
|
@ -52,7 +52,7 @@ template<class T, class Signature>
|
|||||||
using is_completion_handler = std::integral_constant<bool, ...>;
|
using is_completion_handler = std::integral_constant<bool, ...>;
|
||||||
#else
|
#else
|
||||||
using is_completion_handler = std::integral_constant<bool,
|
using is_completion_handler = std::integral_constant<bool,
|
||||||
std::is_copy_constructible<typename std::decay<T>::type>::value &&
|
std::is_move_constructible<typename std::decay<T>::type>::value &&
|
||||||
detail::is_invocable<T, Signature>::value>;
|
detail::is_invocable<T, Signature>::value>;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -344,7 +344,7 @@ class write_some_win32_op
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
write_some_win32_op(write_some_win32_op&&) = default;
|
write_some_win32_op(write_some_win32_op&&) = default;
|
||||||
write_some_win32_op(write_some_win32_op const&) = default;
|
write_some_win32_op(write_some_win32_op const&) = delete;
|
||||||
|
|
||||||
template<class DeducedHandler>
|
template<class DeducedHandler>
|
||||||
write_some_win32_op(
|
write_some_win32_op(
|
||||||
@ -422,7 +422,10 @@ operator()()
|
|||||||
(std::min<std::uint64_t>)(r.body_.last_ - r.pos_, sr_.limit()),
|
(std::min<std::uint64_t>)(r.body_.last_ - r.pos_, sr_.limit()),
|
||||||
(std::numeric_limits<boost::winapi::DWORD_>::max)()));
|
(std::numeric_limits<boost::winapi::DWORD_>::max)()));
|
||||||
boost::asio::windows::overlapped_ptr overlapped{
|
boost::asio::windows::overlapped_ptr overlapped{
|
||||||
sock_.get_executor().context(), *this};
|
sock_.get_executor().context(), std::move(*this)};
|
||||||
|
// Note that we have moved *this, so we cannot access
|
||||||
|
// the handler since it is now moved-from. We can still
|
||||||
|
// access simple things like references and built-in types.
|
||||||
auto& ov = *overlapped.get();
|
auto& ov = *overlapped.get();
|
||||||
ov.Offset = lowPart(r.pos_);
|
ov.Offset = lowPart(r.pos_);
|
||||||
ov.OffsetHigh = highPart(r.pos_);
|
ov.OffsetHigh = highPart(r.pos_);
|
||||||
@ -569,7 +572,7 @@ async_write_some(
|
|||||||
BOOST_ASIO_HANDLER_TYPE(WriteHandler,
|
BOOST_ASIO_HANDLER_TYPE(WriteHandler,
|
||||||
void(error_code, std::size_t)),
|
void(error_code, std::size_t)),
|
||||||
isRequest, Fields>{
|
isRequest, Fields>{
|
||||||
init.completion_handler, sock, sr}();
|
std::move(init.completion_handler), sock, sr}();
|
||||||
return init.result.get();
|
return init.result.get();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -50,7 +50,7 @@ class read_some_op
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
read_some_op(read_some_op&&) = default;
|
read_some_op(read_some_op&&) = default;
|
||||||
read_some_op(read_some_op const&) = default;
|
read_some_op(read_some_op const&) = delete;
|
||||||
|
|
||||||
template<class DeducedHandler>
|
template<class DeducedHandler>
|
||||||
read_some_op(DeducedHandler&& h, Stream& s,
|
read_some_op(DeducedHandler&& h, Stream& s,
|
||||||
@ -208,7 +208,7 @@ class read_op
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
read_op(read_op&&) = default;
|
read_op(read_op&&) = default;
|
||||||
read_op(read_op const&) = default;
|
read_op(read_op const&) = delete;
|
||||||
|
|
||||||
template<class DeducedHandler>
|
template<class DeducedHandler>
|
||||||
read_op(DeducedHandler&& h, Stream& s,
|
read_op(DeducedHandler&& h, Stream& s,
|
||||||
@ -331,7 +331,7 @@ class read_msg_op
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
read_msg_op(read_msg_op&&) = default;
|
read_msg_op(read_msg_op&&) = default;
|
||||||
read_msg_op(read_msg_op const&) = default;
|
read_msg_op(read_msg_op const&) = delete;
|
||||||
|
|
||||||
template<class DeducedHandler, class... Args>
|
template<class DeducedHandler, class... Args>
|
||||||
read_msg_op(DeducedHandler&& h, Stream& s, Args&&... args)
|
read_msg_op(DeducedHandler&& h, Stream& s, Args&&... args)
|
||||||
@ -531,7 +531,7 @@ async_read_some(
|
|||||||
detail::read_some_op<AsyncReadStream,
|
detail::read_some_op<AsyncReadStream,
|
||||||
DynamicBuffer, isRequest, Derived, BOOST_ASIO_HANDLER_TYPE(
|
DynamicBuffer, isRequest, Derived, BOOST_ASIO_HANDLER_TYPE(
|
||||||
ReadHandler, void(error_code, std::size_t))>{
|
ReadHandler, void(error_code, std::size_t))>{
|
||||||
init.completion_handler, stream, buffer, parser}(
|
std::move(init.completion_handler), stream, buffer, parser}(
|
||||||
{}, 0, false);
|
{}, 0, false);
|
||||||
return init.result.get();
|
return init.result.get();
|
||||||
}
|
}
|
||||||
@ -619,8 +619,8 @@ async_read_header(
|
|||||||
detail::read_op<AsyncReadStream, DynamicBuffer,
|
detail::read_op<AsyncReadStream, DynamicBuffer,
|
||||||
isRequest, Derived, detail::parser_is_header_done,
|
isRequest, Derived, detail::parser_is_header_done,
|
||||||
BOOST_ASIO_HANDLER_TYPE(ReadHandler, void(error_code, std::size_t))>{
|
BOOST_ASIO_HANDLER_TYPE(ReadHandler, void(error_code, std::size_t))>{
|
||||||
init.completion_handler, stream, buffer, parser}(
|
std::move(init.completion_handler), stream,
|
||||||
{}, 0, false);
|
buffer, parser}({}, 0, false);
|
||||||
return init.result.get();
|
return init.result.get();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -708,7 +708,7 @@ async_read(
|
|||||||
detail::read_op<AsyncReadStream, DynamicBuffer,
|
detail::read_op<AsyncReadStream, DynamicBuffer,
|
||||||
isRequest, Derived, detail::parser_is_done,
|
isRequest, Derived, detail::parser_is_done,
|
||||||
BOOST_ASIO_HANDLER_TYPE(ReadHandler, void(error_code, std::size_t))>{
|
BOOST_ASIO_HANDLER_TYPE(ReadHandler, void(error_code, std::size_t))>{
|
||||||
init.completion_handler, stream, buffer, parser}(
|
std::move(init.completion_handler), stream, buffer, parser}(
|
||||||
{}, 0, false);
|
{}, 0, false);
|
||||||
return init.result.get();
|
return init.result.get();
|
||||||
}
|
}
|
||||||
@ -803,7 +803,7 @@ async_read(
|
|||||||
isRequest, Body, Allocator,
|
isRequest, Body, Allocator,
|
||||||
BOOST_ASIO_HANDLER_TYPE(
|
BOOST_ASIO_HANDLER_TYPE(
|
||||||
ReadHandler, void(error_code, std::size_t))>{
|
ReadHandler, void(error_code, std::size_t))>{
|
||||||
init.completion_handler, stream, buffer, msg}(
|
std::move(init.completion_handler), stream, buffer, msg}(
|
||||||
{}, 0, false);
|
{}, 0, false);
|
||||||
return init.result.get();
|
return init.result.get();
|
||||||
}
|
}
|
||||||
|
@ -67,7 +67,7 @@ class write_some_op
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
write_some_op(write_some_op&&) = default;
|
write_some_op(write_some_op&&) = default;
|
||||||
write_some_op(write_some_op const&) = default;
|
write_some_op(write_some_op const&) = delete;
|
||||||
|
|
||||||
template<class DeducedHandler>
|
template<class DeducedHandler>
|
||||||
write_some_op(DeducedHandler&& h, Stream& s,
|
write_some_op(DeducedHandler&& h, Stream& s,
|
||||||
@ -203,7 +203,7 @@ class write_op
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
write_op(write_op&&) = default;
|
write_op(write_op&&) = default;
|
||||||
write_op(write_op const&) = default;
|
write_op(write_op const&) = delete;
|
||||||
|
|
||||||
template<class DeducedHandler>
|
template<class DeducedHandler>
|
||||||
write_op(DeducedHandler&& h, Stream& s,
|
write_op(DeducedHandler&& h, Stream& s,
|
||||||
@ -318,7 +318,7 @@ class write_msg_op
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
write_msg_op(write_msg_op&&) = default;
|
write_msg_op(write_msg_op&&) = default;
|
||||||
write_msg_op(write_msg_op const&) = default;
|
write_msg_op(write_msg_op const&) = delete;
|
||||||
|
|
||||||
template<class DeducedHandler, class... Args>
|
template<class DeducedHandler, class... Args>
|
||||||
write_msg_op(DeducedHandler&& h, Stream& s, Args&&... args)
|
write_msg_op(DeducedHandler&& h, Stream& s, Args&&... args)
|
||||||
@ -479,7 +479,7 @@ async_write_some_impl(
|
|||||||
BOOST_ASIO_HANDLER_TYPE(WriteHandler,
|
BOOST_ASIO_HANDLER_TYPE(WriteHandler,
|
||||||
void(error_code, std::size_t)),
|
void(error_code, std::size_t)),
|
||||||
isRequest, Body, Fields>{
|
isRequest, Body, Fields>{
|
||||||
init.completion_handler, stream, sr}();
|
std::move(init.completion_handler), stream, sr}();
|
||||||
return init.result.get();
|
return init.result.get();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -638,7 +638,7 @@ async_write_header(
|
|||||||
void(error_code, std::size_t)),
|
void(error_code, std::size_t)),
|
||||||
detail::serializer_is_header_done,
|
detail::serializer_is_header_done,
|
||||||
isRequest, Body, Fields>{
|
isRequest, Body, Fields>{
|
||||||
init.completion_handler, stream, sr}();
|
std::move(init.completion_handler), stream, sr}();
|
||||||
return init.result.get();
|
return init.result.get();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -715,7 +715,7 @@ async_write(
|
|||||||
void(error_code, std::size_t)),
|
void(error_code, std::size_t)),
|
||||||
detail::serializer_is_done,
|
detail::serializer_is_done,
|
||||||
isRequest, Body, Fields>{
|
isRequest, Body, Fields>{
|
||||||
init.completion_handler, stream, sr}();
|
std::move(init.completion_handler), stream, sr}();
|
||||||
return init.result.get();
|
return init.result.get();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -788,7 +788,7 @@ async_write(
|
|||||||
BOOST_ASIO_HANDLER_TYPE(WriteHandler,
|
BOOST_ASIO_HANDLER_TYPE(WriteHandler,
|
||||||
void(error_code, std::size_t)),
|
void(error_code, std::size_t)),
|
||||||
isRequest, Body, Fields>{
|
isRequest, Body, Fields>{
|
||||||
init.completion_handler, stream, msg}();
|
std::move(init.completion_handler), stream, msg}();
|
||||||
return init.result.get();
|
return init.result.get();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -58,7 +58,7 @@ class stream<NextLayer>::response_op
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
response_op(response_op&&) = default;
|
response_op(response_op&&) = default;
|
||||||
response_op(response_op const&) = default;
|
response_op(response_op const&) = delete;
|
||||||
|
|
||||||
template<class DeducedHandler, class... Args>
|
template<class DeducedHandler, class... Args>
|
||||||
response_op(DeducedHandler&& h,
|
response_op(DeducedHandler&& h,
|
||||||
@ -154,7 +154,7 @@ class stream<NextLayer>::accept_op
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
accept_op(accept_op&&) = default;
|
accept_op(accept_op&&) = default;
|
||||||
accept_op(accept_op const&) = default;
|
accept_op(accept_op const&) = delete;
|
||||||
|
|
||||||
template<class DeducedHandler, class... Args>
|
template<class DeducedHandler, class... Args>
|
||||||
accept_op(DeducedHandler&& h,
|
accept_op(DeducedHandler&& h,
|
||||||
@ -545,7 +545,7 @@ async_accept(
|
|||||||
decltype(&default_decorate_res),
|
decltype(&default_decorate_res),
|
||||||
BOOST_ASIO_HANDLER_TYPE(
|
BOOST_ASIO_HANDLER_TYPE(
|
||||||
AcceptHandler, void(error_code))>{
|
AcceptHandler, void(error_code))>{
|
||||||
init.completion_handler,
|
std::move(init.completion_handler),
|
||||||
*this,
|
*this,
|
||||||
&default_decorate_res}({});
|
&default_decorate_res}({});
|
||||||
return init.result.get();
|
return init.result.get();
|
||||||
@ -574,7 +574,7 @@ async_accept_ex(
|
|||||||
ResponseDecorator,
|
ResponseDecorator,
|
||||||
BOOST_ASIO_HANDLER_TYPE(
|
BOOST_ASIO_HANDLER_TYPE(
|
||||||
AcceptHandler, void(error_code))>{
|
AcceptHandler, void(error_code))>{
|
||||||
init.completion_handler,
|
std::move(init.completion_handler),
|
||||||
*this,
|
*this,
|
||||||
decorator}({});
|
decorator}({});
|
||||||
return init.result.get();
|
return init.result.get();
|
||||||
@ -605,7 +605,7 @@ async_accept(
|
|||||||
decltype(&default_decorate_res),
|
decltype(&default_decorate_res),
|
||||||
BOOST_ASIO_HANDLER_TYPE(
|
BOOST_ASIO_HANDLER_TYPE(
|
||||||
AcceptHandler, void(error_code))>{
|
AcceptHandler, void(error_code))>{
|
||||||
init.completion_handler,
|
std::move(init.completion_handler),
|
||||||
*this,
|
*this,
|
||||||
&default_decorate_res}.run(buffers);
|
&default_decorate_res}.run(buffers);
|
||||||
return init.result.get();
|
return init.result.get();
|
||||||
@ -641,7 +641,7 @@ async_accept_ex(
|
|||||||
ResponseDecorator,
|
ResponseDecorator,
|
||||||
BOOST_ASIO_HANDLER_TYPE(
|
BOOST_ASIO_HANDLER_TYPE(
|
||||||
AcceptHandler, void(error_code))>{
|
AcceptHandler, void(error_code))>{
|
||||||
init.completion_handler,
|
std::move(init.completion_handler),
|
||||||
*this,
|
*this,
|
||||||
decorator}.run(buffers);
|
decorator}.run(buffers);
|
||||||
return init.result.get();
|
return init.result.get();
|
||||||
@ -667,7 +667,7 @@ async_accept(
|
|||||||
response_op<
|
response_op<
|
||||||
BOOST_ASIO_HANDLER_TYPE(
|
BOOST_ASIO_HANDLER_TYPE(
|
||||||
AcceptHandler, void(error_code))>{
|
AcceptHandler, void(error_code))>{
|
||||||
init.completion_handler,
|
std::move(init.completion_handler),
|
||||||
*this,
|
*this,
|
||||||
req,
|
req,
|
||||||
&default_decorate_res}();
|
&default_decorate_res}();
|
||||||
@ -699,7 +699,7 @@ async_accept_ex(
|
|||||||
response_op<
|
response_op<
|
||||||
BOOST_ASIO_HANDLER_TYPE(
|
BOOST_ASIO_HANDLER_TYPE(
|
||||||
AcceptHandler, void(error_code))>{
|
AcceptHandler, void(error_code))>{
|
||||||
init.completion_handler,
|
std::move(init.completion_handler),
|
||||||
*this,
|
*this,
|
||||||
req,
|
req,
|
||||||
decorator}();
|
decorator}();
|
||||||
|
@ -64,7 +64,7 @@ class stream<NextLayer>::close_op
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
close_op(close_op&&) = default;
|
close_op(close_op&&) = default;
|
||||||
close_op(close_op const&) = default;
|
close_op(close_op const&) = delete;
|
||||||
|
|
||||||
template<class DeducedHandler>
|
template<class DeducedHandler>
|
||||||
close_op(
|
close_op(
|
||||||
@ -447,7 +447,7 @@ async_close(close_reason const& cr, CloseHandler&& handler)
|
|||||||
void(error_code)> init{handler};
|
void(error_code)> init{handler};
|
||||||
close_op<BOOST_ASIO_HANDLER_TYPE(
|
close_op<BOOST_ASIO_HANDLER_TYPE(
|
||||||
CloseHandler, void(error_code))>{
|
CloseHandler, void(error_code))>{
|
||||||
init.completion_handler, *this, cr}(
|
std::move(init.completion_handler), *this, cr}(
|
||||||
{}, 0, false);
|
{}, 0, false);
|
||||||
return init.result.get();
|
return init.result.get();
|
||||||
}
|
}
|
||||||
|
@ -65,7 +65,7 @@ class stream<NextLayer>::handshake_op
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
handshake_op(handshake_op&&) = default;
|
handshake_op(handshake_op&&) = default;
|
||||||
handshake_op(handshake_op const&) = default;
|
handshake_op(handshake_op const&) = delete;
|
||||||
|
|
||||||
template<class DeducedHandler, class... Args>
|
template<class DeducedHandler, class... Args>
|
||||||
handshake_op(DeducedHandler&& h,
|
handshake_op(DeducedHandler&& h,
|
||||||
@ -161,7 +161,7 @@ async_handshake(string_view host,
|
|||||||
void(error_code)> init{handler};
|
void(error_code)> init{handler};
|
||||||
handshake_op<BOOST_ASIO_HANDLER_TYPE(
|
handshake_op<BOOST_ASIO_HANDLER_TYPE(
|
||||||
HandshakeHandler, void(error_code))>{
|
HandshakeHandler, void(error_code))>{
|
||||||
init.completion_handler, *this, nullptr, host,
|
std::move(init.completion_handler), *this, nullptr, host,
|
||||||
target, &default_decorate_req}();
|
target, &default_decorate_req}();
|
||||||
return init.result.get();
|
return init.result.get();
|
||||||
}
|
}
|
||||||
@ -182,7 +182,7 @@ async_handshake(response_type& res,
|
|||||||
void(error_code)> init{handler};
|
void(error_code)> init{handler};
|
||||||
handshake_op<BOOST_ASIO_HANDLER_TYPE(
|
handshake_op<BOOST_ASIO_HANDLER_TYPE(
|
||||||
HandshakeHandler, void(error_code))>{
|
HandshakeHandler, void(error_code))>{
|
||||||
init.completion_handler, *this, &res, host,
|
std::move(init.completion_handler), *this, &res, host,
|
||||||
target, &default_decorate_req}();
|
target, &default_decorate_req}();
|
||||||
return init.result.get();
|
return init.result.get();
|
||||||
}
|
}
|
||||||
@ -206,7 +206,7 @@ async_handshake_ex(string_view host,
|
|||||||
void(error_code)> init{handler};
|
void(error_code)> init{handler};
|
||||||
handshake_op<BOOST_ASIO_HANDLER_TYPE(
|
handshake_op<BOOST_ASIO_HANDLER_TYPE(
|
||||||
HandshakeHandler, void(error_code))>{
|
HandshakeHandler, void(error_code))>{
|
||||||
init.completion_handler, *this, nullptr, host,
|
std::move(init.completion_handler), *this, nullptr, host,
|
||||||
target, decorator}();
|
target, decorator}();
|
||||||
return init.result.get();
|
return init.result.get();
|
||||||
}
|
}
|
||||||
@ -231,7 +231,7 @@ async_handshake_ex(response_type& res,
|
|||||||
void(error_code)> init{handler};
|
void(error_code)> init{handler};
|
||||||
handshake_op<BOOST_ASIO_HANDLER_TYPE(
|
handshake_op<BOOST_ASIO_HANDLER_TYPE(
|
||||||
HandshakeHandler, void(error_code))>{
|
HandshakeHandler, void(error_code))>{
|
||||||
init.completion_handler, *this, &res, host,
|
std::move(init.completion_handler), *this, &res, host,
|
||||||
target, decorator}();
|
target, decorator}();
|
||||||
return init.result.get();
|
return init.result.get();
|
||||||
}
|
}
|
||||||
|
@ -62,7 +62,7 @@ class stream<NextLayer>::ping_op
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
ping_op(ping_op&&) = default;
|
ping_op(ping_op&&) = default;
|
||||||
ping_op(ping_op const&) = default;
|
ping_op(ping_op const&) = delete;
|
||||||
|
|
||||||
template<class DeducedHandler>
|
template<class DeducedHandler>
|
||||||
ping_op(
|
ping_op(
|
||||||
@ -241,7 +241,7 @@ async_ping(ping_data const& payload, WriteHandler&& handler)
|
|||||||
void(error_code)> init{handler};
|
void(error_code)> init{handler};
|
||||||
ping_op<BOOST_ASIO_HANDLER_TYPE(
|
ping_op<BOOST_ASIO_HANDLER_TYPE(
|
||||||
WriteHandler, void(error_code))>{
|
WriteHandler, void(error_code))>{
|
||||||
init.completion_handler, *this,
|
std::move(init.completion_handler), *this,
|
||||||
detail::opcode::ping, payload}();
|
detail::opcode::ping, payload}();
|
||||||
return init.result.get();
|
return init.result.get();
|
||||||
}
|
}
|
||||||
@ -259,7 +259,7 @@ async_pong(ping_data const& payload, WriteHandler&& handler)
|
|||||||
void(error_code)> init{handler};
|
void(error_code)> init{handler};
|
||||||
ping_op<BOOST_ASIO_HANDLER_TYPE(
|
ping_op<BOOST_ASIO_HANDLER_TYPE(
|
||||||
WriteHandler, void(error_code))>{
|
WriteHandler, void(error_code))>{
|
||||||
init.completion_handler, *this,
|
std::move(init.completion_handler), *this,
|
||||||
detail::opcode::pong, payload}();
|
detail::opcode::pong, payload}();
|
||||||
return init.result.get();
|
return init.result.get();
|
||||||
}
|
}
|
||||||
|
@ -59,7 +59,7 @@ class stream<NextLayer>::read_some_op
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
read_some_op(read_some_op&&) = default;
|
read_some_op(read_some_op&&) = default;
|
||||||
read_some_op(read_some_op const&) = default;
|
read_some_op(read_some_op const&) = delete;
|
||||||
|
|
||||||
template<class DeducedHandler>
|
template<class DeducedHandler>
|
||||||
read_some_op(
|
read_some_op(
|
||||||
@ -683,7 +683,7 @@ public:
|
|||||||
boost::asio::associated_allocator_t<Handler>;
|
boost::asio::associated_allocator_t<Handler>;
|
||||||
|
|
||||||
read_op(read_op&&) = default;
|
read_op(read_op&&) = default;
|
||||||
read_op(read_op const&) = default;
|
read_op(read_op const&) = delete;
|
||||||
|
|
||||||
template<class DeducedHandler>
|
template<class DeducedHandler>
|
||||||
read_op(
|
read_op(
|
||||||
@ -839,7 +839,7 @@ async_read(DynamicBuffer& buffer, ReadHandler&& handler)
|
|||||||
DynamicBuffer,
|
DynamicBuffer,
|
||||||
BOOST_ASIO_HANDLER_TYPE(
|
BOOST_ASIO_HANDLER_TYPE(
|
||||||
ReadHandler, void(error_code, std::size_t))>{
|
ReadHandler, void(error_code, std::size_t))>{
|
||||||
init.completion_handler,
|
std::move(init.completion_handler),
|
||||||
*this,
|
*this,
|
||||||
buffer,
|
buffer,
|
||||||
0,
|
0,
|
||||||
@ -927,7 +927,7 @@ async_read_some(
|
|||||||
DynamicBuffer,
|
DynamicBuffer,
|
||||||
BOOST_ASIO_HANDLER_TYPE(
|
BOOST_ASIO_HANDLER_TYPE(
|
||||||
ReadHandler, void(error_code, std::size_t))>{
|
ReadHandler, void(error_code, std::size_t))>{
|
||||||
init.completion_handler,
|
std::move(init.completion_handler),
|
||||||
*this,
|
*this,
|
||||||
buffer,
|
buffer,
|
||||||
limit,
|
limit,
|
||||||
@ -1311,7 +1311,7 @@ async_read_some(
|
|||||||
void(error_code, std::size_t)> init{handler};
|
void(error_code, std::size_t)> init{handler};
|
||||||
read_some_op<MutableBufferSequence, BOOST_ASIO_HANDLER_TYPE(
|
read_some_op<MutableBufferSequence, BOOST_ASIO_HANDLER_TYPE(
|
||||||
ReadHandler, void(error_code, std::size_t))>{
|
ReadHandler, void(error_code, std::size_t))>{
|
||||||
init.completion_handler,*this, buffers}(
|
std::move(init.completion_handler), *this, buffers}(
|
||||||
{}, 0, false);
|
{}, 0, false);
|
||||||
return init.result.get();
|
return init.result.get();
|
||||||
}
|
}
|
||||||
|
@ -54,7 +54,7 @@ class stream<NextLayer>::write_some_op
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
write_some_op(write_some_op&&) = default;
|
write_some_op(write_some_op&&) = default;
|
||||||
write_some_op(write_some_op const&) = default;
|
write_some_op(write_some_op const&) = delete;
|
||||||
|
|
||||||
template<class DeducedHandler>
|
template<class DeducedHandler>
|
||||||
write_some_op(
|
write_some_op(
|
||||||
@ -728,7 +728,7 @@ async_write_some(bool fin,
|
|||||||
void(error_code, std::size_t)> init{handler};
|
void(error_code, std::size_t)> init{handler};
|
||||||
write_some_op<ConstBufferSequence, BOOST_ASIO_HANDLER_TYPE(
|
write_some_op<ConstBufferSequence, BOOST_ASIO_HANDLER_TYPE(
|
||||||
WriteHandler, void(error_code, std::size_t))>{
|
WriteHandler, void(error_code, std::size_t))>{
|
||||||
init.completion_handler, *this, fin, bs}(
|
std::move(init.completion_handler), *this, fin, bs}(
|
||||||
{}, 0, false);
|
{}, 0, false);
|
||||||
return init.result.get();
|
return init.result.get();
|
||||||
}
|
}
|
||||||
@ -784,7 +784,7 @@ async_write(
|
|||||||
void(error_code, std::size_t)> init{handler};
|
void(error_code, std::size_t)> init{handler};
|
||||||
write_some_op<ConstBufferSequence, BOOST_ASIO_HANDLER_TYPE(
|
write_some_op<ConstBufferSequence, BOOST_ASIO_HANDLER_TYPE(
|
||||||
WriteHandler, void(error_code, std::size_t))>{
|
WriteHandler, void(error_code, std::size_t))>{
|
||||||
init.completion_handler, *this, true, bs}(
|
std::move(init.completion_handler), *this, true, bs}(
|
||||||
{}, 0, false);
|
{}, 0, false);
|
||||||
return init.result.get();
|
return init.result.get();
|
||||||
}
|
}
|
||||||
|
@ -24,7 +24,7 @@ namespace http {
|
|||||||
class fields_test : public beast::unit_test::suite
|
class fields_test : public beast::unit_test::suite
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
template <class T>
|
template<class T>
|
||||||
class test_allocator
|
class test_allocator
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@ -32,7 +32,8 @@ public:
|
|||||||
|
|
||||||
test_allocator() noexcept(false) {}
|
test_allocator() noexcept(false) {}
|
||||||
|
|
||||||
template <typename U, typename = typename std::enable_if<!std::is_same<test_allocator, U>::value>::type>
|
template<class U, class = typename
|
||||||
|
std::enable_if<!std::is_same<test_allocator, U>::value>::type>
|
||||||
test_allocator(test_allocator<U> const&) noexcept {}
|
test_allocator(test_allocator<U> const&) noexcept {}
|
||||||
|
|
||||||
value_type*
|
value_type*
|
||||||
@ -55,7 +56,7 @@ public:
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
template <class U>
|
template<class U>
|
||||||
friend
|
friend
|
||||||
bool
|
bool
|
||||||
operator!=(test_allocator<T> const& x, test_allocator<U> const& y) noexcept
|
operator!=(test_allocator<T> const& x, test_allocator<U> const& y) noexcept
|
||||||
|
@ -488,7 +488,7 @@ async_read_some(
|
|||||||
return boost::asio::post(
|
return boost::asio::post(
|
||||||
in_->ioc.get_executor(),
|
in_->ioc.get_executor(),
|
||||||
bind_handler(
|
bind_handler(
|
||||||
init.completion_handler,
|
std::move(init.completion_handler),
|
||||||
ec,
|
ec,
|
||||||
0));
|
0));
|
||||||
}
|
}
|
||||||
@ -506,7 +506,7 @@ async_read_some(
|
|||||||
boost::asio::post(
|
boost::asio::post(
|
||||||
in_->ioc.get_executor(),
|
in_->ioc.get_executor(),
|
||||||
bind_handler(
|
bind_handler(
|
||||||
init.completion_handler,
|
std::move(init.completion_handler),
|
||||||
error_code{},
|
error_code{},
|
||||||
bytes_transferred));
|
bytes_transferred));
|
||||||
}
|
}
|
||||||
@ -522,7 +522,7 @@ async_read_some(
|
|||||||
boost::asio::post(
|
boost::asio::post(
|
||||||
in_->ioc.get_executor(),
|
in_->ioc.get_executor(),
|
||||||
bind_handler(
|
bind_handler(
|
||||||
init.completion_handler,
|
std::move(init.completion_handler),
|
||||||
ec,
|
ec,
|
||||||
0));
|
0));
|
||||||
}
|
}
|
||||||
@ -531,7 +531,7 @@ async_read_some(
|
|||||||
in_->op.reset(new read_op_impl<BOOST_ASIO_HANDLER_TYPE(
|
in_->op.reset(new read_op_impl<BOOST_ASIO_HANDLER_TYPE(
|
||||||
ReadHandler, void(error_code, std::size_t)),
|
ReadHandler, void(error_code, std::size_t)),
|
||||||
MutableBufferSequence>{*in_, buffers,
|
MutableBufferSequence>{*in_, buffers,
|
||||||
init.completion_handler});
|
std::move(init.completion_handler)});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return init.result.get();
|
return init.result.get();
|
||||||
@ -605,7 +605,7 @@ async_write_some(ConstBufferSequence const& buffers,
|
|||||||
return boost::asio::post(
|
return boost::asio::post(
|
||||||
in_->ioc.get_executor(),
|
in_->ioc.get_executor(),
|
||||||
bind_handler(
|
bind_handler(
|
||||||
init.completion_handler,
|
std::move(init.completion_handler),
|
||||||
boost::asio::error::connection_reset,
|
boost::asio::error::connection_reset,
|
||||||
0));
|
0));
|
||||||
BOOST_ASSERT(out->code == status::ok);
|
BOOST_ASSERT(out->code == status::ok);
|
||||||
@ -616,7 +616,7 @@ async_write_some(ConstBufferSequence const& buffers,
|
|||||||
return boost::asio::post(
|
return boost::asio::post(
|
||||||
in_->ioc.get_executor(),
|
in_->ioc.get_executor(),
|
||||||
bind_handler(
|
bind_handler(
|
||||||
init.completion_handler,
|
std::move(init.completion_handler),
|
||||||
ec,
|
ec,
|
||||||
0));
|
0));
|
||||||
}
|
}
|
||||||
@ -632,7 +632,7 @@ async_write_some(ConstBufferSequence const& buffers,
|
|||||||
boost::asio::post(
|
boost::asio::post(
|
||||||
in_->ioc.get_executor(),
|
in_->ioc.get_executor(),
|
||||||
bind_handler(
|
bind_handler(
|
||||||
init.completion_handler,
|
std::move(init.completion_handler),
|
||||||
error_code{},
|
error_code{},
|
||||||
bytes_transferred));
|
bytes_transferred));
|
||||||
return init.result.get();
|
return init.result.get();
|
||||||
@ -702,18 +702,11 @@ class stream::read_op_impl : public stream::read_op
|
|||||||
lambda(lambda&&) = default;
|
lambda(lambda&&) = default;
|
||||||
lambda(lambda const&) = default;
|
lambda(lambda const&) = default;
|
||||||
|
|
||||||
lambda(state& s, Buffers const& b, Handler&& h)
|
template<class DeducedHandler>
|
||||||
|
lambda(state& s, Buffers const& b, DeducedHandler&& h)
|
||||||
: s_(s)
|
: s_(s)
|
||||||
, b_(b)
|
, b_(b)
|
||||||
, h_(std::move(h))
|
, h_(std::forward<DeducedHandler>(h))
|
||||||
, work_(s_.ioc.get_executor())
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
lambda(state& s, Buffers const& b, Handler const& h)
|
|
||||||
: s_(s)
|
|
||||||
, b_(b)
|
|
||||||
, h_(h)
|
|
||||||
, work_(s_.ioc.get_executor())
|
, work_(s_.ioc.get_executor())
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
@ -772,13 +765,9 @@ class stream::read_op_impl : public stream::read_op
|
|||||||
lambda fn_;
|
lambda fn_;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
read_op_impl(state& s, Buffers const& b, Handler&& h)
|
template<class DeducedHandler>
|
||||||
: fn_(s, b, std::move(h))
|
read_op_impl(state& s, Buffers const& b, DeducedHandler&& h)
|
||||||
{
|
: fn_(s, b, std::forward<DeducedHandler>(h))
|
||||||
}
|
|
||||||
|
|
||||||
read_op_impl(state& s, Buffers const& b, Handler const& h)
|
|
||||||
: fn_(s, b, h)
|
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user