Harmonize concepts and identifiers with net-ts (API Change):

fix #321

This synchronizes identifier names and some implementation details
with the Networking-TS document and reference implementation.
The following interfaces have changed:

* async_completion
* is_buffer_sequence (removed)
* is_const_buffer_sequence (was is_ConstBufferSequence)
* is_dynamic_buffer (was is_DynamicBuffer)
* is_mutable_buffer_sequence (was is_MutableBufferSequence)
* async_result (new)
* BEAST_HANDLER_TYPE macro (new)
* BEAST_INITFN_RESULT_TYPE macro (new)

Filename changes:

* async_result.hpp (was async_completion.hpp)
This commit is contained in:
Vinnie Falco
2017-05-06 12:36:40 -07:00
parent 46097c7dab
commit d9562ff525
44 changed files with 616 additions and 615 deletions

View File

@@ -20,6 +20,7 @@ API Changes:
* Rename to flat_buffer, basic_flat_buffer * Rename to flat_buffer, basic_flat_buffer
* Rename to static_buffer, static_buffer_n * Rename to static_buffer, static_buffer_n
* Rename to buffered_read_stream * Rename to buffered_read_stream
* Harmonize concepts and identifiers with net-ts
-------------------------------------------------------------------------------- --------------------------------------------------------------------------------

View File

@@ -152,6 +152,7 @@
<bridgehead renderas="sect3">Classes</bridgehead> <bridgehead renderas="sect3">Classes</bridgehead>
<simplelist type="vert" columns="1"> <simplelist type="vert" columns="1">
<member><link linkend="beast.ref.async_completion">async_completion</link></member> <member><link linkend="beast.ref.async_completion">async_completion</link></member>
<member><link linkend="beast.ref.async_result">async_result</link></member>
<member><link linkend="beast.ref.basic_flat_buffer">basic_flat_buffer</link></member> <member><link linkend="beast.ref.basic_flat_buffer">basic_flat_buffer</link></member>
<member><link linkend="beast.ref.basic_multi_buffer">basic_multi_buffer</link></member> <member><link linkend="beast.ref.basic_multi_buffer">basic_multi_buffer</link></member>
<member><link linkend="beast.ref.buffers_adapter">buffers_adapter</link></member> <member><link linkend="beast.ref.buffers_adapter">buffers_adapter</link></member>
@@ -183,6 +184,11 @@
<member><link linkend="beast.ref.prepare_buffers">prepare_buffers</link></member> <member><link linkend="beast.ref.prepare_buffers">prepare_buffers</link></member>
<member><link linkend="beast.ref.system_category">system_category</link></member> <member><link linkend="beast.ref.system_category">system_category</link></member>
</simplelist> </simplelist>
<bridgehead renderas="sect3">Macros</bridgehead>
<simplelist type="vert" columns="1">
<member><link linkend="beast.ref.BEAST_HANDLER_TYPE">BEAST_HANDLER_TYPE</link></member>
<member><link linkend="beast.ref.BEAST_INITFN_RESULT_TYPE">BEAST_INITFN_RESULT_TYPE</link></member>
</simplelist>
</entry> </entry>
<entry valign="top"> <entry valign="top">
<bridgehead renderas="sect3">Type Traits</bridgehead> <bridgehead renderas="sect3">Type Traits</bridgehead>
@@ -190,11 +196,10 @@
<member><link linkend="beast.ref.is_AsyncReadStream">is_AsyncReadStream</link></member> <member><link linkend="beast.ref.is_AsyncReadStream">is_AsyncReadStream</link></member>
<member><link linkend="beast.ref.is_AsyncWriteStream">is_AsyncWriteStream</link></member> <member><link linkend="beast.ref.is_AsyncWriteStream">is_AsyncWriteStream</link></member>
<member><link linkend="beast.ref.is_AsyncStream">is_AsyncStream</link></member> <member><link linkend="beast.ref.is_AsyncStream">is_AsyncStream</link></member>
<member><link linkend="beast.ref.is_BufferSequence">is_BufferSequence</link></member>
<member><link linkend="beast.ref.is_CompletionHandler">is_CompletionHandler</link></member> <member><link linkend="beast.ref.is_CompletionHandler">is_CompletionHandler</link></member>
<member><link linkend="beast.ref.is_ConstBufferSequence">is_ConstBufferSequence</link></member> <member><link linkend="beast.ref.is_const_buffer_sequence">is_const_buffer_sequence</link></member>
<member><link linkend="beast.ref.is_DynamicBuffer">is_DynamicBuffer</link></member> <member><link linkend="beast.ref.is_dynamic_buffer">is_dynamic_buffer</link></member>
<member><link linkend="beast.ref.is_MutableBufferSequence">is_MutableBufferSequence</link></member> <member><link linkend="beast.ref.is_mutable_buffer_sequence">is_mutable_buffer_sequence</link></member>
<member><link linkend="beast.ref.is_SyncReadStream">is_SyncReadStream</link></member> <member><link linkend="beast.ref.is_SyncReadStream">is_SyncReadStream</link></member>
<member><link linkend="beast.ref.is_SyncStream">is_SyncStream</link></member> <member><link linkend="beast.ref.is_SyncStream">is_SyncStream</link></member>
<member><link linkend="beast.ref.is_SyncWriteStream">is_SyncWriteStream</link></member> <member><link linkend="beast.ref.is_SyncWriteStream">is_SyncWriteStream</link></member>

View File

@@ -282,7 +282,11 @@ EXPAND_ONLY_PREDEF = YES
SEARCH_INCLUDES = YES SEARCH_INCLUDES = YES
INCLUDE_PATH = ../ INCLUDE_PATH = ../
INCLUDE_FILE_PATTERNS = INCLUDE_FILE_PATTERNS =
PREDEFINED = BEAST_DOXYGEN
PREDEFINED = \
BEAST_DOXYGEN \
BEAST_INITFN_RESULT_TYPE(t,a)=void_or_deduced
EXPAND_AS_DEFINED = EXPAND_AS_DEFINED =
SKIP_FUNCTION_MACROS = YES SKIP_FUNCTION_MACROS = YES

View File

@@ -8,7 +8,7 @@
#ifndef BEAST_TEST_FAIL_STREAM_HPP #ifndef BEAST_TEST_FAIL_STREAM_HPP
#define BEAST_TEST_FAIL_STREAM_HPP #define BEAST_TEST_FAIL_STREAM_HPP
#include <beast/core/async_completion.hpp> #include <beast/core/async_result.hpp>
#include <beast/core/bind_handler.hpp> #include <beast/core/bind_handler.hpp>
#include <beast/core/error.hpp> #include <beast/core/error.hpp>
#include <beast/core/detail/get_lowest_layer.hpp> #include <beast/core/detail/get_lowest_layer.hpp>
@@ -103,20 +103,19 @@ public:
} }
template<class MutableBufferSequence, class ReadHandler> template<class MutableBufferSequence, class ReadHandler>
typename async_completion< BEAST_INITFN_RESULT_TYPE(
ReadHandler, void(error_code)>::result_type ReadHandler, void(error_code, std::size_t))
async_read_some(MutableBufferSequence const& buffers, async_read_some(MutableBufferSequence const& buffers,
ReadHandler&& handler) ReadHandler&& handler)
{ {
error_code ec; error_code ec;
if(pfc_->fail(ec)) if(pfc_->fail(ec))
{ {
async_completion< async_completion<ReadHandler,
ReadHandler, void(error_code, std::size_t) void(error_code, std::size_t)> init{handler};
> completion{handler};
next_layer_.get_io_service().post( next_layer_.get_io_service().post(
bind_handler(completion.handler, ec, 0)); bind_handler(init.completion_handler, ec, 0));
return completion.result.get(); return init.result.get();
} }
return next_layer_.async_read_some(buffers, return next_layer_.async_read_some(buffers,
std::forward<ReadHandler>(handler)); std::forward<ReadHandler>(handler));
@@ -140,20 +139,19 @@ public:
} }
template<class ConstBufferSequence, class WriteHandler> template<class ConstBufferSequence, class WriteHandler>
typename async_completion< BEAST_INITFN_RESULT_TYPE(
WriteHandler, void(error_code)>::result_type WriteHandler, void(error_code, std::size_t))
async_write_some(ConstBufferSequence const& buffers, async_write_some(ConstBufferSequence const& buffers,
WriteHandler&& handler) WriteHandler&& handler)
{ {
error_code ec; error_code ec;
if(pfc_->fail(ec)) if(pfc_->fail(ec))
{ {
async_completion< async_completion<WriteHandler,
WriteHandler, void(error_code, std::size_t) void(error_code, std::size_t)> init{handler};
> completion{handler};
next_layer_.get_io_service().post( next_layer_.get_io_service().post(
bind_handler(completion.handler, ec, 0)); bind_handler(init.completion_handler, ec, 0));
return completion.result.get(); return init.result.get();
} }
return next_layer_.async_write_some(buffers, return next_layer_.async_write_some(buffers,
std::forward<WriteHandler>(handler)); std::forward<WriteHandler>(handler));

View File

@@ -8,7 +8,7 @@
#ifndef BEAST_TEST_STRING_IOSTREAM_HPP #ifndef BEAST_TEST_STRING_IOSTREAM_HPP
#define BEAST_TEST_STRING_IOSTREAM_HPP #define BEAST_TEST_STRING_IOSTREAM_HPP
#include <beast/core/async_completion.hpp> #include <beast/core/async_result.hpp>
#include <beast/core/bind_handler.hpp> #include <beast/core/bind_handler.hpp>
#include <beast/core/error.hpp> #include <beast/core/error.hpp>
#include <beast/core/prepare_buffer.hpp> #include <beast/core/prepare_buffer.hpp>
@@ -78,8 +78,8 @@ public:
} }
template<class MutableBufferSequence, class ReadHandler> template<class MutableBufferSequence, class ReadHandler>
typename async_completion<ReadHandler, BEAST_INITFN_RESULT_TYPE(
void(error_code, std::size_t)>::result_type ReadHandler, void(error_code, std::size_t))
async_read_some(MutableBufferSequence const& buffers, async_read_some(MutableBufferSequence const& buffers,
ReadHandler&& handler) ReadHandler&& handler)
{ {
@@ -91,10 +91,10 @@ public:
else else
ec = boost::asio::error::eof; ec = boost::asio::error::eof;
async_completion<ReadHandler, async_completion<ReadHandler,
void(error_code, std::size_t)> completion{handler}; void(error_code, std::size_t)> init{handler};
ios_.post(bind_handler( ios_.post(bind_handler(
completion.handler, ec, n)); init.completion_handler, ec, n));
return completion.result.get(); return init.result.get();
} }
template<class ConstBufferSequence> template<class ConstBufferSequence>
@@ -124,19 +124,18 @@ public:
} }
template<class ConstBufferSequence, class WriteHandler> template<class ConstBufferSequence, class WriteHandler>
typename async_completion< BEAST_INITFN_RESULT_TYPE(
WriteHandler, void(error_code)>::result_type WriteHandler, void(error_code, std::size_t))
async_write_some(ConstBufferSequence const& buffers, async_write_some(ConstBufferSequence const& buffers,
WriteHandler&& handler) WriteHandler&& handler)
{ {
error_code ec; error_code ec;
auto const bytes_transferred = write_some(buffers, ec); auto const bytes_transferred = write_some(buffers, ec);
async_completion< async_completion<WriteHandler,
WriteHandler, void(error_code, std::size_t) void(error_code, std::size_t)> init{handler};
> completion{handler};
get_io_service().post( get_io_service().post(
bind_handler(completion.handler, ec, bytes_transferred)); bind_handler(init.completion_handler, ec, bytes_transferred));
return completion.result.get(); return init.result.get();
} }
friend friend

View File

@@ -8,7 +8,7 @@
#ifndef BEAST_TEST_STRING_ISTREAM_HPP #ifndef BEAST_TEST_STRING_ISTREAM_HPP
#define BEAST_TEST_STRING_ISTREAM_HPP #define BEAST_TEST_STRING_ISTREAM_HPP
#include <beast/core/async_completion.hpp> #include <beast/core/async_result.hpp>
#include <beast/core/bind_handler.hpp> #include <beast/core/bind_handler.hpp>
#include <beast/core/error.hpp> #include <beast/core/error.hpp>
#include <beast/core/prepare_buffer.hpp> #include <beast/core/prepare_buffer.hpp>
@@ -76,8 +76,8 @@ public:
} }
template<class MutableBufferSequence, class ReadHandler> template<class MutableBufferSequence, class ReadHandler>
typename async_completion<ReadHandler, BEAST_INITFN_RESULT_TYPE(
void(error_code, std::size_t)>::result_type ReadHandler, void(error_code, std::size_t))
async_read_some(MutableBufferSequence const& buffers, async_read_some(MutableBufferSequence const& buffers,
ReadHandler&& handler) ReadHandler&& handler)
{ {
@@ -89,10 +89,10 @@ public:
else else
ec = boost::asio::error::eof; ec = boost::asio::error::eof;
async_completion<ReadHandler, async_completion<ReadHandler,
void(error_code, std::size_t)> completion{handler}; void(error_code, std::size_t)> init{handler};
ios_.post(bind_handler( ios_.post(bind_handler(
completion.handler, ec, n)); init.completion_handler, ec, n));
return completion.result.get(); return init.result.get();
} }
template<class ConstBufferSequence> template<class ConstBufferSequence>
@@ -115,16 +115,16 @@ public:
} }
template<class ConstBuffeSequence, class WriteHandler> template<class ConstBuffeSequence, class WriteHandler>
typename async_completion<WriteHandler, BEAST_INITFN_RESULT_TYPE(
void(error_code, std::size_t)>::result_type WriteHandler, void(error_code, std::size_t))
async_write_some(ConstBuffeSequence const& buffers, async_write_some(ConstBuffeSequence const& buffers,
WriteHandler&& handler) WriteHandler&& handler)
{ {
async_completion<WriteHandler, async_completion<WriteHandler,
void(error_code, std::size_t)> completion{handler}; void(error_code, std::size_t)> init{handler};
ios_.post(bind_handler(completion.handler, ios_.post(bind_handler(init.completion_handler,
error_code{}, boost::asio::buffer_size(buffers))); error_code{}, boost::asio::buffer_size(buffers)));
return completion.result.get(); return init.result.get();
} }
friend friend

View File

@@ -8,7 +8,7 @@
#ifndef BEAST_TEST_STRING_OSTREAM_HPP #ifndef BEAST_TEST_STRING_OSTREAM_HPP
#define BEAST_TEST_STRING_OSTREAM_HPP #define BEAST_TEST_STRING_OSTREAM_HPP
#include <beast/core/async_completion.hpp> #include <beast/core/async_result.hpp>
#include <beast/core/bind_handler.hpp> #include <beast/core/bind_handler.hpp>
#include <beast/core/error.hpp> #include <beast/core/error.hpp>
#include <beast/websocket/teardown.hpp> #include <beast/websocket/teardown.hpp>
@@ -59,16 +59,16 @@ public:
} }
template<class MutableBufferSequence, class ReadHandler> template<class MutableBufferSequence, class ReadHandler>
typename async_completion<ReadHandler, BEAST_INITFN_RESULT_TYPE(
void(error_code, std::size_t)>::result_type ReadHandler, void(error_code, std::size_t))
async_read_some(MutableBufferSequence const& buffers, async_read_some(MutableBufferSequence const& buffers,
ReadHandler&& handler) ReadHandler&& handler)
{ {
async_completion<ReadHandler, async_completion<ReadHandler,
void(error_code, std::size_t)> completion{handler}; void(error_code, std::size_t)> init{handler};
ios_.post(bind_handler(completion.handler, ios_.post(bind_handler(init.completion_handler,
boost::asio::error::eof, 0)); boost::asio::error::eof, 0));
return completion.result.get(); return init.result.get();
} }
template<class ConstBufferSequence> template<class ConstBufferSequence>
@@ -98,19 +98,18 @@ public:
} }
template<class ConstBufferSequence, class WriteHandler> template<class ConstBufferSequence, class WriteHandler>
typename async_completion< BEAST_INITFN_RESULT_TYPE(
WriteHandler, void(error_code)>::result_type WriteHandler, void(error_code, std::size_t))
async_write_some(ConstBufferSequence const& buffers, async_write_some(ConstBufferSequence const& buffers,
WriteHandler&& handler) WriteHandler&& handler)
{ {
error_code ec; error_code ec;
auto const bytes_transferred = write_some(buffers, ec); auto const bytes_transferred = write_some(buffers, ec);
async_completion< async_completion<WriteHandler,
WriteHandler, void(error_code, std::size_t) void(error_code, std::size_t)> init{handler};
> completion{handler};
get_io_service().post( get_io_service().post(
bind_handler(completion.handler, ec, bytes_transferred)); bind_handler(init.completion_handler, ec, bytes_transferred));
return completion.result.get(); return init.result.get();
} }
friend friend

View File

@@ -10,7 +10,7 @@
#include <beast/config.hpp> #include <beast/config.hpp>
#include <beast/core/async_completion.hpp> #include <beast/core/async_result.hpp>
#include <beast/core/bind_handler.hpp> #include <beast/core/bind_handler.hpp>
#include <beast/core/buffer_cat.hpp> #include <beast/core/buffer_cat.hpp>
#include <beast/core/buffer_concepts.hpp> #include <beast/core/buffer_concepts.hpp>

View File

@@ -1,88 +0,0 @@
//
// Copyright (c) 2013-2017 Vinnie Falco (vinnie dot falco at gmail dot com)
//
// Distributed under the Boost Software License, Version 1.0. (See accompanying
// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
//
#ifndef BEAST_ASYNC_COMPLETION_HPP
#define BEAST_ASYNC_COMPLETION_HPP
#include <beast/config.hpp>
#include <beast/core/handler_concepts.hpp>
#include <boost/asio/async_result.hpp>
#include <boost/asio/handler_type.hpp>
#include <type_traits>
#include <utility>
namespace beast {
/** Helper for customizing the return type of asynchronous initiation functions.
This class template is used to transform caller-provided completion
handlers in calls to asynchronous initiation functions. The transformation
allows customization of the return type of the initiating function, and the
function signature of the final handler.
@tparam CompletionHandler A completion handler, or a user defined type
with specializations for customizing the return type (for example,
`boost::asio::use_future` or `boost::asio::yield_context`).
@tparam Signature The callable signature of the final completion handler.
Example:
@code
...
template<class CompletionHandler>
typename async_completion<CompletionHandler,
void(error_code)>::result_type
async_initfn(..., CompletionHandler&& handler)
{
async_completion<CompletionHandler,
void(error_code)> completion{handler};
...
return completion.result.get();
}
@endcode
@note See <a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n3896.pdf">
Library Foundations For Asynchronous Operations</a>
*/
template<class CompletionHandler, class Signature>
struct async_completion
{
/** The type of the final handler called by the asynchronous initiation function.
Objects of this type will be callable with the specified signature.
*/
using handler_type =
typename boost::asio::handler_type<
CompletionHandler, Signature>::type;
/// The type of the value returned by the asynchronous initiation function.
using result_type = typename
boost::asio::async_result<handler_type>::type;
/** Construct the helper.
@param token The completion handler. Copies will be made as
required. If `CompletionHandler` is movable, it may also be moved.
*/
async_completion(typename std::remove_reference<CompletionHandler>::type& token)
: handler(std::forward<CompletionHandler>(token))
, result(handler)
{
static_assert(is_CompletionHandler<handler_type, Signature>::value,
"Handler requirements not met");
}
/// The final completion handler, callable with the specified signature.
handler_type handler;
/// The return value of the asynchronous initiation function.
boost::asio::async_result<handler_type> result;
};
} // beast
#endif

View File

@@ -0,0 +1,188 @@
//
// Copyright (c) 2013-2017 Vinnie Falco (vinnie dot falco at gmail dot com)
//
// Distributed under the Boost Software License, Version 1.0. (See accompanying
// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
//
#ifndef BEAST_ASYNC_COMPLETION_HPP
#define BEAST_ASYNC_COMPLETION_HPP
#include <beast/config.hpp>
#include <beast/core/handler_concepts.hpp>
#include <beast/core/detail/type_traits.hpp>
#include <boost/asio/async_result.hpp>
#include <boost/asio/handler_type.hpp>
#include <type_traits>
#include <utility>
namespace beast {
/** An interface for customising the behaviour of an initiating function.
The async_result class is used for determining:
@li the concrete completion handler type to be called at the end of the
asynchronous operation;
@li the initiating function return type; and
@li how the return value of the initiating function is obtained.
The trait allows the handler and return types to be determined at the point
where the specific completion handler signature is known.
This template takes advantage of specializations of both
`boost::asio_async_result` and `boost::asio::handler_type` for user-defined
completion token types. The primary template assumes that the
@b CompletionToken is the completion handler.
@see @ref BEAST_INITFN_RESULT_TYPE, @ref BEAST_HANDLER_TYPE
*/
template<class CompletionToken, class Signature>
class async_result
{
static_assert(! std::is_reference<
CompletionToken>::value, "");
boost::asio::async_result<typename
boost::asio::handler_type<CompletionToken,
Signature>::type> impl_;
async_result(async_result const&) = delete;
async_result& operator=(async_result const&) = delete;
public:
/// The concrete completion handler type for the specific signature.
using completion_handler_type =
typename boost::asio::handler_type<
CompletionToken, Signature>::type;
/// The return type of the initiating function.
using return_type =
typename boost::asio::async_result<
completion_handler_type>::type;
/** Construct an async result from a given handler.
When using a specalised async_result, the constructor has
an opportunity to initialise some state associated with the
completion handler, which is then returned from the initiating
function.
*/
explicit
async_result(completion_handler_type& h)
: impl_(h)
{
}
/// Obtain the value to be returned from the initiating function.
return_type
get()
{
return impl_.get();
}
};
/** Helper for customizing the return type of asynchronous initiation functions.
This class template is used to transform caller-provided completion
handlers in calls to asynchronous initiation functions. The transformation
allows customization of the return type of the initiating function, and the
function signature of the final handler.
@tparam CompletionToken A completion handler, or a user defined type
with specializations for customizing the return type (for example,
`boost::asio::use_future` or `boost::asio::yield_context`).
@tparam Signature The callable signature of the final completion handler.
Example:
@code
...
template<class CompletionToken>
typename async_completion<CompletionToken, void(error_code)>::result_type
async_initfn(..., CompletionToken&& handler)
{
async_completion<CompletionToken, void(error_code)> completion{handler};
...
return completion.result.get();
}
@endcode
@tparam CompletionToken Specifies the model used to obtain the result of
the asynchronous operation.
@tparam Signature The call signature for the completion handler type invoked
on completion of the asynchronous operation.
@note See <a href="http://cplusplus.github.io/networking-ts/draft.pdf">
Working Draft, C++ Extensions for Networking</a>
*/
template<class CompletionToken, class Signature>
struct async_completion
{
/** The type of the final handler called by the asynchronous initiation function.
Objects of this type will be callable with the specified signature.
*/
using completion_handler_type = typename async_result<
typename std::decay<CompletionToken>::type,
Signature>::completion_handler_type;
/** Constructor
The constructor creates the concrete completion handler and
makes the link between the handler and the asynchronous
result.
@param token The completion token. If this is a regular completion
handler, copies may be made as needed. If the handler is movable,
it may also be moved.
*/
explicit
async_completion(CompletionToken& token)
: completion_handler(static_cast<typename std::conditional<
std::is_same<CompletionToken, completion_handler_type>::value,
completion_handler_type&, CompletionToken&&>::type>(token))
, result(completion_handler)
{
// CompletionToken is not invokable with the given signature
static_assert(is_CompletionHandler<
completion_handler_type, Signature>::value,
"CompletionToken requirements not met (Signature mismatch)");
}
/// The final completion handler, callable with the specified signature.
typename std::conditional<std::is_same<
CompletionToken, completion_handler_type>::value,
completion_handler_type&,
completion_handler_type
>::type completion_handler;
/// The return value of the asynchronous initiation function.
async_result<typename std::decay<
CompletionToken>::type, Signature> result;
};
/// @file
/** @def BEAST_INITFN_RESULT_TYPE(ct, sig)
A macro to customize the return value of asynchronous initiation functions.
*/
#define BEAST_INITFN_RESULT_TYPE(ct, sig) \
typename async_result< \
typename std::decay<ct>::type, sig>::return_type
/** @def BEAST_HANDLER_TYPE(ct, sig)
A helper macro to convert a completion token to a completion handler type.
*/
#define BEAST_HANDLER_TYPE(ct, sig) \
typename async_result< \
typename std::decay<ct>::type, sig>::completion_handler_type
} // beast
#endif

View File

@@ -15,44 +15,37 @@
namespace beast { namespace beast {
/// Determine if `T` meets the requirements of @b `BufferSequence`. /// Determine if `T` meets the requirements of @b ConstBufferSequence.
template<class T, class BufferType> template<class T>
#if BEAST_DOXYGEN #if BEAST_DOXYGEN
struct is_BufferSequence : std::integral_constant<bool, ...> struct is_const_buffer_sequence : std::integral_constant<bool, ...>
#else #else
struct is_BufferSequence : detail::is_BufferSequence<T, BufferType>::type struct is_const_buffer_sequence :
detail::is_buffer_sequence<T,
boost::asio::const_buffer>::type
#endif #endif
{ {
}; };
/// Determine if `T` meets the requirements of @b `ConstBufferSequence`. /// Determine if `T` meets the requirements of @b DynamicBuffer.
template<class T> template<class T>
#if BEAST_DOXYGEN #if BEAST_DOXYGEN
struct is_ConstBufferSequence : std::integral_constant<bool, ...> struct is_dynamic_buffer : std::integral_constant<bool, ...>
#else #else
struct is_ConstBufferSequence : struct is_dynamic_buffer :
is_BufferSequence<T, boost::asio::const_buffer> detail::is_dynamic_buffer<T>::type
#endif #endif
{ {
}; };
/// Determine if `T` meets the requirements of @b `DynamicBuffer`. /// Determine if `T` meets the requirements of @b MutableBufferSequence.
template<class T> template<class T>
#if BEAST_DOXYGEN #if BEAST_DOXYGEN
struct is_DynamicBuffer : std::integral_constant<bool, ...> struct is_mutable_buffer_sequence : std::integral_constant<bool, ...>
#else #else
struct is_DynamicBuffer : detail::is_DynamicBuffer<T>::type struct is_mutable_buffer_sequence :
#endif detail::is_buffer_sequence<T,
{ boost::asio::mutable_buffer>::type
};
/// Determine if `T` meets the requirements of @b `MutableBufferSequence`.
template<class T>
#if BEAST_DOXYGEN
struct is_MutableBufferSequence : std::integral_constant<bool, ...>
#else
struct is_MutableBufferSequence :
is_BufferSequence<T, boost::asio::mutable_buffer>
#endif #endif
{ {
}; };

View File

@@ -9,7 +9,7 @@
#define BEAST_BUFFERED_READ_STREAM_HPP #define BEAST_BUFFERED_READ_STREAM_HPP
#include <beast/config.hpp> #include <beast/config.hpp>
#include <beast/core/async_completion.hpp> #include <beast/core/async_result.hpp>
#include <beast/core/buffer_concepts.hpp> #include <beast/core/buffer_concepts.hpp>
#include <beast/core/error.hpp> #include <beast/core/error.hpp>
#include <beast/core/stream_concepts.hpp> #include <beast/core/stream_concepts.hpp>
@@ -90,7 +90,7 @@ namespace beast {
template<class Stream, class DynamicBuffer> template<class Stream, class DynamicBuffer>
class buffered_read_stream class buffered_read_stream
{ {
static_assert(is_DynamicBuffer<DynamicBuffer>::value, static_assert(is_dynamic_buffer<DynamicBuffer>::value,
"DynamicBuffer requirements not met"); "DynamicBuffer requirements not met");
template<class Buffers, class Handler> template<class Buffers, class Handler>
@@ -272,11 +272,7 @@ public:
manner equivalent to using `boost::asio::io_service::post`. manner equivalent to using `boost::asio::io_service::post`.
*/ */
template<class MutableBufferSequence, class ReadHandler> template<class MutableBufferSequence, class ReadHandler>
#if BEAST_DOXYGEN BEAST_INITFN_RESULT_TYPE(ReadHandler, void(error_code))
void_or_deduced
#else
typename async_completion<ReadHandler, void(error_code)>::result_type
#endif
async_read_some(MutableBufferSequence const& buffers, async_read_some(MutableBufferSequence const& buffers,
ReadHandler&& handler); ReadHandler&& handler);
@@ -347,11 +343,7 @@ public:
manner equivalent to using `boost::asio::io_service::post`. manner equivalent to using `boost::asio::io_service::post`.
*/ */
template<class ConstBufferSequence, class WriteHandler> template<class ConstBufferSequence, class WriteHandler>
#if BEAST_DOXYGEN BEAST_INITFN_RESULT_TYPE(WriteHandler, void(error_code))
void_or_deduced
#else
typename async_completion<WriteHandler, void(error_code)>::result_type
#endif
async_write_some(ConstBufferSequence const& buffers, async_write_some(ConstBufferSequence const& buffers,
WriteHandler&& handler); WriteHandler&& handler);
}; };

View File

@@ -32,7 +32,7 @@ namespace beast {
template<class MutableBufferSequence> template<class MutableBufferSequence>
class buffers_adapter class buffers_adapter
{ {
static_assert(is_MutableBufferSequence<MutableBufferSequence>::value, static_assert(is_mutable_buffer_sequence<MutableBufferSequence>::value,
"MutableBufferSequence requirements not met"); "MutableBufferSequence requirements not met");
using iter_type = typename MutableBufferSequence::const_iterator; using iter_type = typename MutableBufferSequence::const_iterator;

View File

@@ -9,7 +9,6 @@
#define BEAST_CONSUMING_BUFFERS_HPP #define BEAST_CONSUMING_BUFFERS_HPP
#include <beast/config.hpp> #include <beast/config.hpp>
#include <beast/core/buffer_concepts.hpp>
#include <boost/asio/buffer.hpp> #include <boost/asio/buffer.hpp>
#include <cstdint> #include <cstdint>
#include <iterator> #include <iterator>

View File

@@ -33,7 +33,7 @@ using MutableBufferSequence =
BufferSequence<boost::asio::mutable_buffer>; BufferSequence<boost::asio::mutable_buffer>;
template<class T, class BufferType> template<class T, class BufferType>
class is_BufferSequence class is_buffer_sequence
{ {
template<class U, class R = std::is_convertible< template<class U, class R = std::is_convertible<
typename U::value_type, BufferType> > typename U::value_type, BufferType> >
@@ -88,19 +88,19 @@ public:
template<class B1, class... Bn> template<class B1, class... Bn>
struct is_all_ConstBufferSequence struct is_all_ConstBufferSequence
: std::integral_constant<bool, : std::integral_constant<bool,
is_BufferSequence<B1, boost::asio::const_buffer>::type::value && is_buffer_sequence<B1, boost::asio::const_buffer>::type::value &&
is_all_ConstBufferSequence<Bn...>::value> is_all_ConstBufferSequence<Bn...>::value>
{ {
}; };
template<class B1> template<class B1>
struct is_all_ConstBufferSequence<B1> struct is_all_ConstBufferSequence<B1>
: is_BufferSequence<B1, boost::asio::const_buffer>::type : is_buffer_sequence<B1, boost::asio::const_buffer>::type
{ {
}; };
template<class T> template<class T>
class is_DynamicBuffer class is_dynamic_buffer
{ {
// size() // size()
template<class U, class R = std::is_convertible<decltype( template<class U, class R = std::is_convertible<decltype(
@@ -128,7 +128,7 @@ class is_DynamicBuffer
// data() // data()
template<class U, class R = std::integral_constant< template<class U, class R = std::integral_constant<
bool, is_BufferSequence<decltype( bool, is_buffer_sequence<decltype(
std::declval<U const>().data()), std::declval<U const>().data()),
boost::asio::const_buffer>::type::value>> boost::asio::const_buffer>::type::value>>
static R check4(int); static R check4(int);
@@ -138,7 +138,7 @@ class is_DynamicBuffer
// prepare() // prepare()
template<class U, class R = std::integral_constant< template<class U, class R = std::integral_constant<
bool, is_BufferSequence<decltype( bool, is_buffer_sequence<decltype(
std::declval<U>().prepare(1)), std::declval<U>().prepare(1)),
boost::asio::mutable_buffer>::type::value>> boost::asio::mutable_buffer>::type::value>>
static R check5(int); static R check5(int);

View File

@@ -51,7 +51,7 @@ sync_ostream::
write_some(ConstBufferSequence const& buffers) write_some(ConstBufferSequence const& buffers)
{ {
static_assert( static_assert(
is_ConstBufferSequence<ConstBufferSequence>::value, is_const_buffer_sequence<ConstBufferSequence>::value,
"ConstBufferSequence requirements not met"); "ConstBufferSequence requirements not met");
error_code ec; error_code ec;
auto const n = write_some(buffers, ec); auto const n = write_some(buffers, ec);
@@ -67,7 +67,7 @@ write_some(ConstBufferSequence const& buffers,
error_code& ec) error_code& ec)
{ {
static_assert( static_assert(
is_ConstBufferSequence<ConstBufferSequence>::value, is_const_buffer_sequence<ConstBufferSequence>::value,
"ConstBufferSequence requirements not met"); "ConstBufferSequence requirements not met");
std::size_t n = 0; std::size_t n = 0;
using boost::asio::buffer_cast; using boost::asio::buffer_cast;

View File

@@ -162,12 +162,11 @@ auto
buffered_read_stream<Stream, DynamicBuffer>:: buffered_read_stream<Stream, DynamicBuffer>::
async_write_some(ConstBufferSequence const& buffers, async_write_some(ConstBufferSequence const& buffers,
WriteHandler&& handler) -> WriteHandler&& handler) ->
typename async_completion< BEAST_INITFN_RESULT_TYPE(WriteHandler, void(error_code))
WriteHandler, void(error_code)>::result_type
{ {
static_assert(is_AsyncWriteStream<next_layer_type>::value, static_assert(is_AsyncWriteStream<next_layer_type>::value,
"AsyncWriteStream requirements not met"); "AsyncWriteStream requirements not met");
static_assert(is_ConstBufferSequence< static_assert(is_const_buffer_sequence<
ConstBufferSequence>::value, ConstBufferSequence>::value,
"ConstBufferSequence requirements not met"); "ConstBufferSequence requirements not met");
static_assert(is_CompletionHandler<WriteHandler, static_assert(is_CompletionHandler<WriteHandler,
@@ -186,7 +185,7 @@ read_some(
{ {
static_assert(is_SyncReadStream<next_layer_type>::value, static_assert(is_SyncReadStream<next_layer_type>::value,
"SyncReadStream requirements not met"); "SyncReadStream requirements not met");
static_assert(is_MutableBufferSequence< static_assert(is_mutable_buffer_sequence<
MutableBufferSequence>::value, MutableBufferSequence>::value,
"MutableBufferSequence requirements not met"); "MutableBufferSequence requirements not met");
error_code ec; error_code ec;
@@ -205,7 +204,7 @@ read_some(MutableBufferSequence const& buffers,
{ {
static_assert(is_SyncReadStream<next_layer_type>::value, static_assert(is_SyncReadStream<next_layer_type>::value,
"SyncReadStream requirements not met"); "SyncReadStream requirements not met");
static_assert(is_MutableBufferSequence< static_assert(is_mutable_buffer_sequence<
MutableBufferSequence>::value, MutableBufferSequence>::value,
"MutableBufferSequence requirements not met"); "MutableBufferSequence requirements not met");
using boost::asio::buffer_size; using boost::asio::buffer_size;
@@ -229,24 +228,21 @@ template<class Stream, class DynamicBuffer>
template<class MutableBufferSequence, class ReadHandler> template<class MutableBufferSequence, class ReadHandler>
auto auto
buffered_read_stream<Stream, DynamicBuffer>:: buffered_read_stream<Stream, DynamicBuffer>::
async_read_some( async_read_some(MutableBufferSequence const& buffers,
MutableBufferSequence const& buffers,
ReadHandler&& handler) -> ReadHandler&& handler) ->
typename async_completion< BEAST_INITFN_RESULT_TYPE(ReadHandler, void(error_code))
ReadHandler, void(error_code)>::result_type
{ {
static_assert(is_AsyncReadStream<next_layer_type>::value, static_assert(is_AsyncReadStream<next_layer_type>::value,
"Stream requirements not met"); "Stream requirements not met");
static_assert(is_MutableBufferSequence< static_assert(is_mutable_buffer_sequence<
MutableBufferSequence>::value, MutableBufferSequence>::value,
"MutableBufferSequence requirements not met"); "MutableBufferSequence requirements not met");
beast::async_completion< async_completion<ReadHandler,
ReadHandler, void(error_code, std::size_t) void(error_code, std::size_t)> init{handler};
> completion{handler}; read_some_op<MutableBufferSequence, BEAST_HANDLER_TYPE(
read_some_op<MutableBufferSequence, ReadHandler, void(error_code, std::size_t))>{
decltype(completion.handler)>{ init.completion_handler, *this, buffers};
completion.handler, *this, buffers}; return init.result.get();
return completion.result.get();
} }
} // beast } // beast

View File

@@ -9,7 +9,6 @@
#define BEAST_IMPL_CONSUMING_BUFFERS_IPP #define BEAST_IMPL_CONSUMING_BUFFERS_IPP
#include <beast/core/buffer_concepts.hpp> #include <beast/core/buffer_concepts.hpp>
#include <boost/asio/buffer.hpp>
#include <algorithm> #include <algorithm>
#include <cstdint> #include <cstdint>
#include <iterator> #include <iterator>
@@ -163,7 +162,8 @@ consuming_buffers(BufferSequence const& bs)
, begin_(bs_.begin()) , begin_(bs_.begin())
{ {
static_assert( static_assert(
is_BufferSequence<BufferSequence, value_type>::value, is_const_buffer_sequence<BufferSequence>::value||
is_mutable_buffer_sequence<BufferSequence>::value,
"BufferSequence requirements not met"); "BufferSequence requirements not met");
} }

View File

@@ -44,7 +44,7 @@ detail::buffers_helper<ConstBufferSequence>
#endif #endif
buffers(ConstBufferSequence const& b) buffers(ConstBufferSequence const& b)
{ {
static_assert(is_ConstBufferSequence< static_assert(is_const_buffer_sequence<
ConstBufferSequence>::value, ConstBufferSequence>::value,
"ConstBufferSequence not met"); "ConstBufferSequence not met");
return detail::buffers_helper< return detail::buffers_helper<
@@ -86,7 +86,7 @@ detail::ostream_helper<
#endif #endif
ostream(DynamicBuffer& buffer) ostream(DynamicBuffer& buffer)
{ {
static_assert(is_DynamicBuffer<DynamicBuffer>::value, static_assert(is_dynamic_buffer<DynamicBuffer>::value,
"DynamicBuffer requirements not met"); "DynamicBuffer requirements not met");
return detail::ostream_helper< return detail::ostream_helper<
DynamicBuffer, char, std::char_traits<char>, DynamicBuffer, char, std::char_traits<char>,

View File

@@ -159,7 +159,7 @@ struct is_Reader<T, M, beast::detail::void_t<decltype(
std::declval<std::size_t>()), std::declval<std::size_t>()),
std::declval<T>().finish() std::declval<T>().finish()
)> > : std::integral_constant<bool, )> > : std::integral_constant<bool,
is_MutableBufferSequence< is_mutable_buffer_sequence<
typename T::mutable_buffers_type>::value && typename T::mutable_buffers_type>::value &&
std::is_convertible<decltype( std::is_convertible<decltype(
std::declval<T>().prepare( std::declval<T>().prepare(

View File

@@ -572,34 +572,34 @@ template<
class DynamicBuffer, class DynamicBuffer,
bool isRequest, class Derived, bool isRequest, class Derived,
class ReadHandler> class ReadHandler>
typename async_completion< BEAST_INITFN_RESULT_TYPE(
ReadHandler, void(error_code, std::size_t)>::result_type ReadHandler, void(error_code, std::size_t))
async_read_some( async_read_some(
AsyncReadStream& stream, AsyncReadStream& stream,
DynamicBuffer& dynabuf, DynamicBuffer& dynabuf,
basic_parser<isRequest, true, Derived>& parser, basic_parser<isRequest, true, Derived>& parser,
ReadHandler&& handler) ReadHandler&& handler)
{ {
beast::async_completion<ReadHandler, async_completion<ReadHandler,
void(error_code, std::size_t)> completion{handler}; void(error_code, std::size_t)> init{handler};
switch(parser.state()) switch(parser.state())
{ {
case parse_state::header: case parse_state::header:
case parse_state::chunk_header: case parse_state::chunk_header:
detail::read_some_buffer_op<AsyncReadStream, detail::read_some_buffer_op<AsyncReadStream,
DynamicBuffer, isRequest, true, Derived, DynamicBuffer, isRequest, true, Derived, BEAST_HANDLER_TYPE(
decltype(completion.handler)>{ ReadHandler, void(error_code, std::size_t))>{
completion.handler, stream, dynabuf, parser}; init.completion_handler, stream, dynabuf, parser};
break; break;
default: default:
detail::read_some_body_op<AsyncReadStream, detail::read_some_body_op<AsyncReadStream,
DynamicBuffer, isRequest, Derived, DynamicBuffer, isRequest, Derived, BEAST_HANDLER_TYPE(
decltype(completion.handler)>{ ReadHandler, void(error_code, std::size_t))>{
completion.handler, stream, dynabuf, parser}; init.completion_handler, stream, dynabuf, parser};
break; break;
} }
return completion.result.get(); return init.result.get();
} }
template< template<
@@ -608,21 +608,21 @@ template<
bool isRequest, class Derived, bool isRequest, class Derived,
class ReadHandler> class ReadHandler>
inline inline
typename async_completion< BEAST_INITFN_RESULT_TYPE(
ReadHandler, void(error_code, std::size_t)>::result_type ReadHandler, void(error_code, std::size_t))
async_read_some( async_read_some(
AsyncReadStream& stream, AsyncReadStream& stream,
DynamicBuffer& dynabuf, DynamicBuffer& dynabuf,
basic_parser<isRequest, false, Derived>& parser, basic_parser<isRequest, false, Derived>& parser,
ReadHandler&& handler) ReadHandler&& handler)
{ {
beast::async_completion<ReadHandler, async_completion<ReadHandler,
void(error_code, std::size_t)> completion{handler}; void(error_code, std::size_t)> init{handler};
detail::read_some_buffer_op<AsyncReadStream, detail::read_some_buffer_op<AsyncReadStream,
DynamicBuffer, isRequest, false, Derived, DynamicBuffer, isRequest, false, Derived, BEAST_HANDLER_TYPE(
decltype(completion.handler)>{ ReadHandler, void(error_code, std::size_t))>{
completion.handler, stream, dynabuf, parser}; init.completion_handler, stream, dynabuf, parser};
return completion.result.get(); return init.result.get();
} }
} // detail } // detail
@@ -634,8 +634,8 @@ template<
class DynamicBuffer, class DynamicBuffer,
bool isRequest, bool isDirect, class Derived, bool isRequest, bool isDirect, class Derived,
class ReadHandler> class ReadHandler>
typename async_completion< BEAST_INITFN_RESULT_TYPE(
ReadHandler, void(error_code, std::size_t)>::result_type ReadHandler, void(error_code, std::size_t))
async_read_some( async_read_some(
AsyncReadStream& stream, AsyncReadStream& stream,
DynamicBuffer& dynabuf, DynamicBuffer& dynabuf,
@@ -644,7 +644,7 @@ async_read_some(
{ {
static_assert(is_AsyncReadStream<AsyncReadStream>::value, static_assert(is_AsyncReadStream<AsyncReadStream>::value,
"AsyncReadStream requirements not met"); "AsyncReadStream requirements not met");
static_assert(is_DynamicBuffer<DynamicBuffer>::value, static_assert(is_dynamic_buffer<DynamicBuffer>::value,
"DynamicBuffer requirements not met"); "DynamicBuffer requirements not met");
BOOST_ASSERT(! parser.is_complete()); BOOST_ASSERT(! parser.is_complete());
return detail::async_read_some(stream, dynabuf, parser, return detail::async_read_some(stream, dynabuf, parser,
@@ -656,8 +656,8 @@ template<
class DynamicBuffer, class DynamicBuffer,
bool isRequest, bool isDirect, class Derived, bool isRequest, bool isDirect, class Derived,
class ReadHandler> class ReadHandler>
typename async_completion< BEAST_INITFN_RESULT_TYPE(
ReadHandler, void(error_code)>::result_type ReadHandler, void(error_code))
async_read( async_read(
AsyncReadStream& stream, AsyncReadStream& stream,
DynamicBuffer& dynabuf, DynamicBuffer& dynabuf,
@@ -666,15 +666,16 @@ async_read(
{ {
static_assert(is_AsyncReadStream<AsyncReadStream>::value, static_assert(is_AsyncReadStream<AsyncReadStream>::value,
"AsyncReadStream requirements not met"); "AsyncReadStream requirements not met");
static_assert(is_DynamicBuffer<DynamicBuffer>::value, static_assert(is_dynamic_buffer<DynamicBuffer>::value,
"DynamicBuffer requirements not met"); "DynamicBuffer requirements not met");
BOOST_ASSERT(! parser.is_complete()); BOOST_ASSERT(! parser.is_complete());
beast::async_completion<ReadHandler, async_completion<ReadHandler,
void(error_code)> completion{handler}; void(error_code)> init{handler};
detail::parse_op<AsyncReadStream, DynamicBuffer, detail::parse_op<AsyncReadStream, DynamicBuffer,
isRequest, isDirect, Derived, decltype(completion.handler)>{ isRequest, isDirect, Derived, BEAST_HANDLER_TYPE(
completion.handler, stream, dynabuf, parser}; ReadHandler, void(error_code))>{
return completion.result.get(); init.completion_handler, stream, dynabuf, parser};
return init.result.get();
} }
template< template<
@@ -682,8 +683,8 @@ template<
class DynamicBuffer, class DynamicBuffer,
bool isRequest, class Body, class Fields, bool isRequest, class Body, class Fields,
class ReadHandler> class ReadHandler>
typename async_completion< BEAST_INITFN_RESULT_TYPE(
ReadHandler, void(error_code)>::result_type ReadHandler, void(error_code))
async_read( async_read(
AsyncReadStream& stream, AsyncReadStream& stream,
DynamicBuffer& dynabuf, DynamicBuffer& dynabuf,
@@ -692,7 +693,7 @@ async_read(
{ {
static_assert(is_AsyncReadStream<AsyncReadStream>::value, static_assert(is_AsyncReadStream<AsyncReadStream>::value,
"AsyncReadStream requirements not met"); "AsyncReadStream requirements not met");
static_assert(is_DynamicBuffer<DynamicBuffer>::value, static_assert(is_dynamic_buffer<DynamicBuffer>::value,
"DynamicBuffer requirements not met"); "DynamicBuffer requirements not met");
static_assert(is_Body<Body>::value, static_assert(is_Body<Body>::value,
"Body requirements not met"); "Body requirements not met");
@@ -701,13 +702,13 @@ async_read(
static_assert(is_Reader<typename Body::reader, static_assert(is_Reader<typename Body::reader,
message<isRequest, Body, Fields>>::value, message<isRequest, Body, Fields>>::value,
"Reader requirements not met"); "Reader requirements not met");
beast::async_completion<ReadHandler, async_completion<ReadHandler,
void(error_code)> completion{handler}; void(error_code)> init{handler};
detail::read_message_op<AsyncReadStream, DynamicBuffer, detail::read_message_op<AsyncReadStream, DynamicBuffer,
isRequest, Body, Fields, decltype( isRequest, Body, Fields, BEAST_HANDLER_TYPE(
completion.handler)>{completion.handler, ReadHandler, void(error_code))>{
stream, dynabuf, msg}; init.completion_handler, stream, dynabuf, msg};
return completion.result.get(); return init.result.get();
} }
} // http } // http

View File

@@ -71,7 +71,7 @@ basic_parser<isRequest, isDirect, Derived>::
write(ConstBufferSequence const& buffers, write(ConstBufferSequence const& buffers,
error_code& ec) error_code& ec)
{ {
static_assert(is_ConstBufferSequence< static_assert(is_const_buffer_sequence<
ConstBufferSequence>::value, ConstBufferSequence>::value,
"ConstBufferSequence requirements not met"); "ConstBufferSequence requirements not met");
auto const buffer = maybe_flatten(buffers); auto const buffer = maybe_flatten(buffers);

View File

@@ -192,7 +192,7 @@ read_some(
{ {
static_assert(is_SyncReadStream<SyncReadStream>::value, static_assert(is_SyncReadStream<SyncReadStream>::value,
"SyncReadStream requirements not met"); "SyncReadStream requirements not met");
static_assert(is_DynamicBuffer<DynamicBuffer>::value, static_assert(is_dynamic_buffer<DynamicBuffer>::value,
"DynamicBuffer requirements not met"); "DynamicBuffer requirements not met");
BOOST_ASSERT(! parser.is_complete()); BOOST_ASSERT(! parser.is_complete());
error_code ec; error_code ec;
@@ -216,7 +216,7 @@ read_some(
{ {
static_assert(is_SyncReadStream<SyncReadStream>::value, static_assert(is_SyncReadStream<SyncReadStream>::value,
"SyncReadStream requirements not met"); "SyncReadStream requirements not met");
static_assert(is_DynamicBuffer<DynamicBuffer>::value, static_assert(is_dynamic_buffer<DynamicBuffer>::value,
"DynamicBuffer requirements not met"); "DynamicBuffer requirements not met");
BOOST_ASSERT(! parser.is_complete()); BOOST_ASSERT(! parser.is_complete());
return detail::read_some(stream, dynabuf, parser, ec); return detail::read_some(stream, dynabuf, parser, ec);
@@ -234,7 +234,7 @@ read(
{ {
static_assert(is_SyncReadStream<SyncReadStream>::value, static_assert(is_SyncReadStream<SyncReadStream>::value,
"SyncReadStream requirements not met"); "SyncReadStream requirements not met");
static_assert(is_DynamicBuffer<DynamicBuffer>::value, static_assert(is_dynamic_buffer<DynamicBuffer>::value,
"DynamicBuffer requirements not met"); "DynamicBuffer requirements not met");
BOOST_ASSERT(! parser.is_complete()); BOOST_ASSERT(! parser.is_complete());
error_code ec; error_code ec;
@@ -256,7 +256,7 @@ read(
{ {
static_assert(is_SyncReadStream<SyncReadStream>::value, static_assert(is_SyncReadStream<SyncReadStream>::value,
"SyncReadStream requirements not met"); "SyncReadStream requirements not met");
static_assert(is_DynamicBuffer<DynamicBuffer>::value, static_assert(is_dynamic_buffer<DynamicBuffer>::value,
"DynamicBuffer requirements not met"); "DynamicBuffer requirements not met");
BOOST_ASSERT(! parser.is_complete()); BOOST_ASSERT(! parser.is_complete());
do do
@@ -282,7 +282,7 @@ read(
{ {
static_assert(is_SyncReadStream<SyncReadStream>::value, static_assert(is_SyncReadStream<SyncReadStream>::value,
"SyncReadStream requirements not met"); "SyncReadStream requirements not met");
static_assert(is_DynamicBuffer<DynamicBuffer>::value, static_assert(is_dynamic_buffer<DynamicBuffer>::value,
"DynamicBuffer requirements not met"); "DynamicBuffer requirements not met");
static_assert(is_Body<Body>::value, static_assert(is_Body<Body>::value,
"Body requirements not met"); "Body requirements not met");
@@ -310,7 +310,7 @@ read(
{ {
static_assert(is_SyncReadStream<SyncReadStream>::value, static_assert(is_SyncReadStream<SyncReadStream>::value,
"SyncReadStream requirements not met"); "SyncReadStream requirements not met");
static_assert(is_DynamicBuffer<DynamicBuffer>::value, static_assert(is_dynamic_buffer<DynamicBuffer>::value,
"DynamicBuffer requirements not met"); "DynamicBuffer requirements not met");
static_assert(is_Body<Body>::value, static_assert(is_Body<Body>::value,
"Body requirements not met"); "Body requirements not met");

View File

@@ -213,16 +213,16 @@ write(SyncWriteStream& stream,
template<class AsyncWriteStream, template<class AsyncWriteStream,
bool isRequest, class Fields, bool isRequest, class Fields,
class WriteHandler> class WriteHandler>
typename async_completion< BEAST_INITFN_RESULT_TYPE(
WriteHandler, void(error_code)>::result_type WriteHandler, void(error_code))
async_write(AsyncWriteStream& stream, async_write(AsyncWriteStream& stream,
header<isRequest, Fields> const& msg, header<isRequest, Fields> const& msg,
WriteHandler&& handler) WriteHandler&& handler)
{ {
static_assert(is_AsyncWriteStream<AsyncWriteStream>::value, static_assert(is_AsyncWriteStream<AsyncWriteStream>::value,
"AsyncWriteStream requirements not met"); "AsyncWriteStream requirements not met");
beast::async_completion<WriteHandler, async_completion<WriteHandler,
void(error_code)> completion{handler}; void(error_code)> init{handler};
multi_buffer b; multi_buffer b;
{ {
auto os = ostream(b); auto os = ostream(b);
@@ -231,9 +231,9 @@ async_write(AsyncWriteStream& stream,
os << "\r\n"; os << "\r\n";
} }
detail::write_streambuf_op<AsyncWriteStream, detail::write_streambuf_op<AsyncWriteStream,
decltype(completion.handler)>{ BEAST_HANDLER_TYPE(WriteHandler, void(error_code))>{
completion.handler, stream, std::move(b)}; init.completion_handler, stream, std::move(b)};
return completion.result.get(); return init.result.get();
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
@@ -641,8 +641,8 @@ write(SyncWriteStream& stream,
template<class AsyncWriteStream, template<class AsyncWriteStream,
bool isRequest, class Body, class Fields, bool isRequest, class Body, class Fields,
class WriteHandler> class WriteHandler>
typename async_completion< BEAST_INITFN_RESULT_TYPE(
WriteHandler, void(error_code)>::result_type WriteHandler, void(error_code))
async_write(AsyncWriteStream& stream, async_write(AsyncWriteStream& stream,
message<isRequest, Body, Fields> const& msg, message<isRequest, Body, Fields> const& msg,
WriteHandler&& handler) WriteHandler&& handler)
@@ -656,11 +656,12 @@ async_write(AsyncWriteStream& stream,
static_assert(is_Writer<typename Body::writer, static_assert(is_Writer<typename Body::writer,
message<isRequest, Body, Fields>>::value, message<isRequest, Body, Fields>>::value,
"Writer requirements not met"); "Writer requirements not met");
beast::async_completion<WriteHandler, async_completion<WriteHandler,
void(error_code)> completion{handler}; void(error_code)> init{handler};
detail::write_op<AsyncWriteStream, decltype(completion.handler), detail::write_op<AsyncWriteStream, BEAST_HANDLER_TYPE(
isRequest, Body, Fields>{completion.handler, stream, msg}; WriteHandler, void(error_code)), isRequest,
return completion.result.get(); Body, Fields>{init.completion_handler, stream, msg};
return init.result.get();
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------

View File

@@ -9,7 +9,7 @@
#define BEAST_HTTP_READ_HPP #define BEAST_HTTP_READ_HPP
#include <beast/config.hpp> #include <beast/config.hpp>
#include <beast/core/async_completion.hpp> #include <beast/core/async_result.hpp>
#include <beast/core/error.hpp> #include <beast/core/error.hpp>
#include <beast/http/basic_parser.hpp> #include <beast/http/basic_parser.hpp>
#include <beast/http/message.hpp> #include <beast/http/message.hpp>
@@ -179,12 +179,8 @@ template<
class DynamicBuffer, class DynamicBuffer,
bool isRequest, bool isDirect, class Derived, bool isRequest, bool isDirect, class Derived,
class ReadHandler> class ReadHandler>
#if BEAST_DOXYGEN BEAST_INITFN_RESULT_TYPE(
void_or_deduced ReadHandler, void(error_code, std::size_t))
#else
typename async_completion<
ReadHandler, void(error_code, std::size_t)>::result_type
#endif
async_read_some( async_read_some(
AsyncReadStream& stream, AsyncReadStream& stream,
DynamicBuffer& dynabuf, DynamicBuffer& dynabuf,
@@ -318,12 +314,8 @@ template<
class DynamicBuffer, class DynamicBuffer,
bool isRequest, bool isDirect, class Derived, bool isRequest, bool isDirect, class Derived,
class ReadHandler> class ReadHandler>
#if BEAST_DOXYGEN BEAST_INITFN_RESULT_TYPE(
void_or_deduced ReadHandler, void(error_code))
#else
typename async_completion<
ReadHandler, void(error_code)>::result_type
#endif
async_read( async_read(
AsyncReadStream& stream, AsyncReadStream& stream,
DynamicBuffer& dynabuf, DynamicBuffer& dynabuf,
@@ -462,12 +454,8 @@ template<
class DynamicBuffer, class DynamicBuffer,
bool isRequest, class Body, class Fields, bool isRequest, class Body, class Fields,
class ReadHandler> class ReadHandler>
#if BEAST_DOXYGEN BEAST_INITFN_RESULT_TYPE(
void_or_deduced ReadHandler, void(error_code))
#else
typename async_completion<
ReadHandler, void(error_code)>::result_type
#endif
async_read( async_read(
AsyncReadStream& stream, AsyncReadStream& stream,
DynamicBuffer& dynabuf, DynamicBuffer& dynabuf,

View File

@@ -11,7 +11,7 @@
#include <beast/config.hpp> #include <beast/config.hpp>
#include <beast/http/message.hpp> #include <beast/http/message.hpp>
#include <beast/core/error.hpp> #include <beast/core/error.hpp>
#include <beast/core/async_completion.hpp> #include <beast/core/async_result.hpp>
#include <ostream> #include <ostream>
#include <type_traits> #include <type_traits>
@@ -121,12 +121,8 @@ write(SyncWriteStream& stream,
template<class AsyncWriteStream, template<class AsyncWriteStream,
bool isRequest, class Fields, bool isRequest, class Fields,
class WriteHandler> class WriteHandler>
#if BEAST_DOXYGEN BEAST_INITFN_RESULT_TYPE(
void_or_deduced WriteHandler, void(error_code))
#else
typename async_completion<
WriteHandler, void(error_code)>::result_type
#endif
async_write(AsyncWriteStream& stream, async_write(AsyncWriteStream& stream,
header<isRequest, Fields> const& msg, header<isRequest, Fields> const& msg,
WriteHandler&& handler); WriteHandler&& handler);
@@ -240,12 +236,8 @@ write(SyncWriteStream& stream,
template<class AsyncWriteStream, template<class AsyncWriteStream,
bool isRequest, class Body, class Fields, bool isRequest, class Body, class Fields,
class WriteHandler> class WriteHandler>
#if BEAST_DOXYGEN BEAST_INITFN_RESULT_TYPE(
void_or_deduced WriteHandler, void(error_code))
#else
typename async_completion<
WriteHandler, void(error_code)>::result_type
#endif
async_write(AsyncWriteStream& stream, async_write(AsyncWriteStream& stream,
message<isRequest, Body, Fields> const& msg, message<isRequest, Body, Fields> const& msg,
WriteHandler&& handler); WriteHandler&& handler);

View File

@@ -125,7 +125,7 @@ template<class ConstBufferSequence>
bool bool
utf8_checker_t<_>::write(ConstBufferSequence const& bs) utf8_checker_t<_>::write(ConstBufferSequence const& bs)
{ {
static_assert(is_ConstBufferSequence<ConstBufferSequence>::value, static_assert(is_const_buffer_sequence<ConstBufferSequence>::value,
"ConstBufferSequence requirements not met"); "ConstBufferSequence requirements not met");
using boost::asio::buffer_cast; using boost::asio::buffer_cast;
using boost::asio::buffer_size; using boost::asio::buffer_size;

View File

@@ -360,7 +360,7 @@ accept(ConstBufferSequence const& buffers)
{ {
static_assert(is_SyncStream<next_layer_type>::value, static_assert(is_SyncStream<next_layer_type>::value,
"SyncStream requirements not met"); "SyncStream requirements not met");
static_assert(is_ConstBufferSequence< static_assert(is_const_buffer_sequence<
ConstBufferSequence>::value, ConstBufferSequence>::value,
"ConstBufferSequence requirements not met"); "ConstBufferSequence requirements not met");
error_code ec; error_code ec;
@@ -379,7 +379,7 @@ accept_ex(ConstBufferSequence const& buffers,
{ {
static_assert(is_SyncStream<next_layer_type>::value, static_assert(is_SyncStream<next_layer_type>::value,
"SyncStream requirements not met"); "SyncStream requirements not met");
static_assert(is_ConstBufferSequence< static_assert(is_const_buffer_sequence<
ConstBufferSequence>::value, ConstBufferSequence>::value,
"ConstBufferSequence requirements not met"); "ConstBufferSequence requirements not met");
static_assert(detail::is_ResponseDecorator< static_assert(detail::is_ResponseDecorator<
@@ -399,7 +399,7 @@ accept(ConstBufferSequence const& buffers, error_code& ec)
{ {
static_assert(is_SyncStream<next_layer_type>::value, static_assert(is_SyncStream<next_layer_type>::value,
"SyncStream requirements not met"); "SyncStream requirements not met");
static_assert(is_ConstBufferSequence< static_assert(is_const_buffer_sequence<
ConstBufferSequence>::value, ConstBufferSequence>::value,
"ConstBufferSequence requirements not met"); "ConstBufferSequence requirements not met");
reset(); reset();
@@ -421,10 +421,10 @@ accept_ex(ConstBufferSequence const& buffers,
{ {
static_assert(is_SyncStream<next_layer_type>::value, static_assert(is_SyncStream<next_layer_type>::value,
"SyncStream requirements not met"); "SyncStream requirements not met");
static_assert(is_ConstBufferSequence< static_assert(is_const_buffer_sequence<
ConstBufferSequence>::value, ConstBufferSequence>::value,
"ConstBufferSequence requirements not met"); "ConstBufferSequence requirements not met");
static_assert(is_ConstBufferSequence< static_assert(is_const_buffer_sequence<
ConstBufferSequence>::value, ConstBufferSequence>::value,
"ConstBufferSequence requirements not met"); "ConstBufferSequence requirements not met");
reset(); reset();
@@ -506,7 +506,7 @@ accept(http::header<true, Fields> const& req,
{ {
static_assert(is_SyncStream<next_layer_type>::value, static_assert(is_SyncStream<next_layer_type>::value,
"SyncStream requirements not met"); "SyncStream requirements not met");
static_assert(is_ConstBufferSequence< static_assert(is_const_buffer_sequence<
ConstBufferSequence>::value, ConstBufferSequence>::value,
"ConstBufferSequence requirements not met"); "ConstBufferSequence requirements not met");
error_code ec; error_code ec;
@@ -526,7 +526,7 @@ accept_ex(http::header<true, Fields> const& req,
{ {
static_assert(is_SyncStream<next_layer_type>::value, static_assert(is_SyncStream<next_layer_type>::value,
"SyncStream requirements not met"); "SyncStream requirements not met");
static_assert(is_ConstBufferSequence< static_assert(is_const_buffer_sequence<
ConstBufferSequence>::value, ConstBufferSequence>::value,
"ConstBufferSequence requirements not met"); "ConstBufferSequence requirements not met");
static_assert(detail::is_ResponseDecorator< static_assert(detail::is_ResponseDecorator<
@@ -547,7 +547,7 @@ accept(http::header<true, Fields> const& req,
{ {
static_assert(is_SyncStream<next_layer_type>::value, static_assert(is_SyncStream<next_layer_type>::value,
"SyncStream requirements not met"); "SyncStream requirements not met");
static_assert(is_ConstBufferSequence< static_assert(is_const_buffer_sequence<
ConstBufferSequence>::value, ConstBufferSequence>::value,
"ConstBufferSequence requirements not met"); "ConstBufferSequence requirements not met");
reset(); reset();
@@ -571,7 +571,7 @@ accept_ex(http::header<true, Fields> const& req,
{ {
static_assert(is_SyncStream<next_layer_type>::value, static_assert(is_SyncStream<next_layer_type>::value,
"SyncStream requirements not met"); "SyncStream requirements not met");
static_assert(is_ConstBufferSequence< static_assert(is_const_buffer_sequence<
ConstBufferSequence>::value, ConstBufferSequence>::value,
"ConstBufferSequence requirements not met"); "ConstBufferSequence requirements not met");
static_assert(detail::is_ResponseDecorator< static_assert(detail::is_ResponseDecorator<
@@ -590,26 +590,26 @@ accept_ex(http::header<true, Fields> const& req,
template<class NextLayer> template<class NextLayer>
template<class AcceptHandler> template<class AcceptHandler>
typename async_completion<AcceptHandler, BEAST_INITFN_RESULT_TYPE(
void(error_code)>::result_type AcceptHandler, void(error_code))
stream<NextLayer>:: stream<NextLayer>::
async_accept(AcceptHandler&& handler) async_accept(AcceptHandler&& handler)
{ {
static_assert(is_AsyncStream<next_layer_type>::value, static_assert(is_AsyncStream<next_layer_type>::value,
"AsyncStream requirements requirements not met"); "AsyncStream requirements requirements not met");
beast::async_completion<AcceptHandler, async_completion<AcceptHandler,
void(error_code)> completion{handler}; void(error_code)> init{handler};
reset(); reset();
accept_op<decltype(&default_decorate_res), accept_op<decltype(&default_decorate_res),
decltype(completion.handler)>{completion.handler, BEAST_HANDLER_TYPE(AcceptHandler, void(error_code))>{
*this, &default_decorate_res}; init.completion_handler, *this, &default_decorate_res};
return completion.result.get(); return init.result.get();
} }
template<class NextLayer> template<class NextLayer>
template<class ResponseDecorator, class AcceptHandler> template<class ResponseDecorator, class AcceptHandler>
typename async_completion<AcceptHandler, BEAST_INITFN_RESULT_TYPE(
void(error_code)>::result_type AcceptHandler, void(error_code))
stream<NextLayer>:: stream<NextLayer>::
async_accept_ex(ResponseDecorator const& decorator, async_accept_ex(ResponseDecorator const& decorator,
AcceptHandler&& handler) AcceptHandler&& handler)
@@ -619,41 +619,42 @@ async_accept_ex(ResponseDecorator const& decorator,
static_assert(detail::is_ResponseDecorator< static_assert(detail::is_ResponseDecorator<
ResponseDecorator>::value, ResponseDecorator>::value,
"ResponseDecorator requirements not met"); "ResponseDecorator requirements not met");
beast::async_completion<AcceptHandler, async_completion<AcceptHandler,
void(error_code)> completion{handler}; void(error_code)> init{handler};
reset(); reset();
accept_op<ResponseDecorator, decltype(completion.handler)>{ accept_op<ResponseDecorator, BEAST_HANDLER_TYPE(
completion.handler, *this, decorator}; AcceptHandler, void(error_code))>{
return completion.result.get(); init.completion_handler, *this, decorator};
return init.result.get();
} }
template<class NextLayer> template<class NextLayer>
template<class ConstBufferSequence, class AcceptHandler> template<class ConstBufferSequence, class AcceptHandler>
typename async_completion<AcceptHandler, BEAST_INITFN_RESULT_TYPE(
void(error_code)>::result_type AcceptHandler, void(error_code))
stream<NextLayer>:: stream<NextLayer>::
async_accept(ConstBufferSequence const& buffers, async_accept(ConstBufferSequence const& buffers,
AcceptHandler&& handler) AcceptHandler&& handler)
{ {
static_assert(is_AsyncStream<next_layer_type>::value, static_assert(is_AsyncStream<next_layer_type>::value,
"AsyncStream requirements requirements not met"); "AsyncStream requirements requirements not met");
static_assert(is_ConstBufferSequence< static_assert(is_const_buffer_sequence<
ConstBufferSequence>::value, ConstBufferSequence>::value,
"ConstBufferSequence requirements not met"); "ConstBufferSequence requirements not met");
beast::async_completion<AcceptHandler, async_completion<AcceptHandler,
void(error_code)> completion{handler}; void(error_code)> init{handler};
reset(); reset();
accept_op<decltype(&default_decorate_res), accept_op<decltype(&default_decorate_res),
decltype(completion.handler)>{completion.handler, BEAST_HANDLER_TYPE(AcceptHandler, void(error_code))>{
*this, buffers, &default_decorate_res}; init.completion_handler, *this, buffers, &default_decorate_res};
return completion.result.get(); return init.result.get();
} }
template<class NextLayer> template<class NextLayer>
template<class ConstBufferSequence, template<class ConstBufferSequence,
class ResponseDecorator, class AcceptHandler> class ResponseDecorator, class AcceptHandler>
typename async_completion<AcceptHandler, BEAST_INITFN_RESULT_TYPE(
void(error_code)>::result_type AcceptHandler, void(error_code))
stream<NextLayer>:: stream<NextLayer>::
async_accept_ex(ConstBufferSequence const& buffers, async_accept_ex(ConstBufferSequence const& buffers,
ResponseDecorator const& decorator, ResponseDecorator const& decorator,
@@ -661,45 +662,47 @@ async_accept_ex(ConstBufferSequence const& buffers,
{ {
static_assert(is_AsyncStream<next_layer_type>::value, static_assert(is_AsyncStream<next_layer_type>::value,
"AsyncStream requirements requirements not met"); "AsyncStream requirements requirements not met");
static_assert(is_ConstBufferSequence< static_assert(is_const_buffer_sequence<
ConstBufferSequence>::value, ConstBufferSequence>::value,
"ConstBufferSequence requirements not met"); "ConstBufferSequence requirements not met");
static_assert(detail::is_ResponseDecorator< static_assert(detail::is_ResponseDecorator<
ResponseDecorator>::value, ResponseDecorator>::value,
"ResponseDecorator requirements not met"); "ResponseDecorator requirements not met");
beast::async_completion<AcceptHandler, async_completion<AcceptHandler,
void(error_code)> completion{handler}; void(error_code)> init{handler};
reset(); reset();
accept_op<ResponseDecorator, decltype(completion.handler)>{ accept_op<ResponseDecorator, BEAST_HANDLER_TYPE(
completion.handler, *this, buffers, decorator}; AcceptHandler, void(error_code))>{
return completion.result.get(); init.completion_handler, *this, buffers, decorator};
return init.result.get();
} }
template<class NextLayer> template<class NextLayer>
template<class Fields, class AcceptHandler> template<class Fields, class AcceptHandler>
typename async_completion<AcceptHandler, BEAST_INITFN_RESULT_TYPE(
void(error_code)>::result_type AcceptHandler, void(error_code))
stream<NextLayer>:: stream<NextLayer>::
async_accept(http::header<true, Fields> const& req, async_accept(http::header<true, Fields> const& req,
AcceptHandler&& handler) AcceptHandler&& handler)
{ {
static_assert(is_AsyncStream<next_layer_type>::value, static_assert(is_AsyncStream<next_layer_type>::value,
"AsyncStream requirements requirements not met"); "AsyncStream requirements requirements not met");
beast::async_completion<AcceptHandler, async_completion<AcceptHandler,
void(error_code)> completion{handler}; void(error_code)> init{handler};
reset(); reset();
response_op<decltype(completion.handler)>{ response_op<BEAST_HANDLER_TYPE(
completion.handler, *this, req, AcceptHandler, void(error_code))>{init.completion_handler,
&default_decorate_res, beast_asio_helpers:: *this, req, &default_decorate_res,
is_continuation(completion.handler)}; beast_asio_helpers::is_continuation(
return completion.result.get(); init.completion_handler)};
return init.result.get();
} }
template<class NextLayer> template<class NextLayer>
template<class Fields, template<class Fields,
class ResponseDecorator, class AcceptHandler> class ResponseDecorator, class AcceptHandler>
typename async_completion<AcceptHandler, BEAST_INITFN_RESULT_TYPE(
void(error_code)>::result_type AcceptHandler, void(error_code))
stream<NextLayer>:: stream<NextLayer>::
async_accept_ex(http::header<true, Fields> const& req, async_accept_ex(http::header<true, Fields> const& req,
ResponseDecorator const& decorator, AcceptHandler&& handler) ResponseDecorator const& decorator, AcceptHandler&& handler)
@@ -709,21 +712,22 @@ async_accept_ex(http::header<true, Fields> const& req,
static_assert(detail::is_ResponseDecorator< static_assert(detail::is_ResponseDecorator<
ResponseDecorator>::value, ResponseDecorator>::value,
"ResponseDecorator requirements not met"); "ResponseDecorator requirements not met");
beast::async_completion<AcceptHandler, async_completion<AcceptHandler,
void(error_code)> completion{handler}; void(error_code)> init{handler};
reset(); reset();
response_op<decltype(completion.handler)>{ response_op<BEAST_HANDLER_TYPE(
completion.handler, *this, req, decorator, AcceptHandler, void(error_code))>{
init.completion_handler, *this, req, decorator,
beast_asio_helpers::is_continuation( beast_asio_helpers::is_continuation(
completion.handler)}; init.completion_handler)};
return completion.result.get(); return init.result.get();
} }
template<class NextLayer> template<class NextLayer>
template<class Fields, template<class Fields,
class ConstBufferSequence, class AcceptHandler> class ConstBufferSequence, class AcceptHandler>
typename async_completion<AcceptHandler, BEAST_INITFN_RESULT_TYPE(
void(error_code)>::result_type AcceptHandler, void(error_code))
stream<NextLayer>:: stream<NextLayer>::
async_accept(http::header<true, Fields> const& req, async_accept(http::header<true, Fields> const& req,
ConstBufferSequence const& buffers, ConstBufferSequence const& buffers,
@@ -731,24 +735,25 @@ async_accept(http::header<true, Fields> const& req,
{ {
static_assert(is_AsyncStream<next_layer_type>::value, static_assert(is_AsyncStream<next_layer_type>::value,
"AsyncStream requirements requirements not met"); "AsyncStream requirements requirements not met");
static_assert(is_ConstBufferSequence< static_assert(is_const_buffer_sequence<
ConstBufferSequence>::value, ConstBufferSequence>::value,
"ConstBufferSequence requirements not met"); "ConstBufferSequence requirements not met");
beast::async_completion<AcceptHandler, async_completion<AcceptHandler,
void(error_code)> completion{handler}; void(error_code)> init{handler};
reset(); reset();
response_op<decltype(completion.handler)>{ response_op<BEAST_HANDLER_TYPE(
completion.handler, *this, req, buffers, AcceptHandler, void(error_code))>{
init.completion_handler, *this, req, buffers,
&default_decorate_res, beast_asio_helpers:: &default_decorate_res, beast_asio_helpers::
is_continuation(completion.handler)}; is_continuation(init.completion_handler)};
return completion.result.get(); return init.result.get();
} }
template<class NextLayer> template<class NextLayer>
template<class Fields, class ConstBufferSequence, template<class Fields, class ConstBufferSequence,
class ResponseDecorator, class AcceptHandler> class ResponseDecorator, class AcceptHandler>
typename async_completion<AcceptHandler, BEAST_INITFN_RESULT_TYPE(
void(error_code)>::result_type AcceptHandler, void(error_code))
stream<NextLayer>:: stream<NextLayer>::
async_accept_ex(http::header<true, Fields> const& req, async_accept_ex(http::header<true, Fields> const& req,
ConstBufferSequence const& buffers, ConstBufferSequence const& buffers,
@@ -757,20 +762,21 @@ async_accept_ex(http::header<true, Fields> const& req,
{ {
static_assert(is_AsyncStream<next_layer_type>::value, static_assert(is_AsyncStream<next_layer_type>::value,
"AsyncStream requirements requirements not met"); "AsyncStream requirements requirements not met");
static_assert(is_ConstBufferSequence< static_assert(is_const_buffer_sequence<
ConstBufferSequence>::value, ConstBufferSequence>::value,
"ConstBufferSequence requirements not met"); "ConstBufferSequence requirements not met");
static_assert(detail::is_ResponseDecorator< static_assert(detail::is_ResponseDecorator<
ResponseDecorator>::value, ResponseDecorator>::value,
"ResponseDecorator requirements not met"); "ResponseDecorator requirements not met");
beast::async_completion<AcceptHandler, async_completion<AcceptHandler,
void(error_code)> completion{handler}; void(error_code)> init{handler};
reset(); reset();
response_op<decltype(completion.handler)>{ response_op<BEAST_HANDLER_TYPE(
completion.handler, *this, req, buffers, decorator, AcceptHandler, void(error_code))>{init.completion_handler,
*this, req, buffers, decorator,
beast_asio_helpers::is_continuation( beast_asio_helpers::is_continuation(
completion.handler)}; init.completion_handler)};
return completion.result.get(); return init.result.get();
} }
} // websocket } // websocket

View File

@@ -197,19 +197,19 @@ upcall:
template<class NextLayer> template<class NextLayer>
template<class CloseHandler> template<class CloseHandler>
typename async_completion< BEAST_INITFN_RESULT_TYPE(
CloseHandler, void(error_code)>::result_type CloseHandler, void(error_code))
stream<NextLayer>:: stream<NextLayer>::
async_close(close_reason const& cr, CloseHandler&& handler) async_close(close_reason const& cr, CloseHandler&& handler)
{ {
static_assert(is_AsyncStream<next_layer_type>::value, static_assert(is_AsyncStream<next_layer_type>::value,
"AsyncStream requirements not met"); "AsyncStream requirements not met");
beast::async_completion< async_completion<CloseHandler,
CloseHandler, void(error_code) void(error_code)> init{handler};
> completion{handler}; close_op<BEAST_HANDLER_TYPE(
close_op<decltype(completion.handler)>{ CloseHandler, void(error_code))>{
completion.handler, *this, cr}; init.completion_handler, *this, cr};
return completion.result.get(); return init.result.get();
} }
template<class NextLayer> template<class NextLayer>

View File

@@ -160,8 +160,8 @@ operator()(error_code ec, bool again)
template<class NextLayer> template<class NextLayer>
template<class HandshakeHandler> template<class HandshakeHandler>
typename async_completion<HandshakeHandler, BEAST_INITFN_RESULT_TYPE(
void(error_code)>::result_type HandshakeHandler, void(error_code))
stream<NextLayer>:: stream<NextLayer>::
async_handshake(string_view const& host, async_handshake(string_view const& host,
string_view const& target, string_view const& target,
@@ -169,18 +169,19 @@ async_handshake(string_view const& host,
{ {
static_assert(is_AsyncStream<next_layer_type>::value, static_assert(is_AsyncStream<next_layer_type>::value,
"AsyncStream requirements not met"); "AsyncStream requirements not met");
beast::async_completion<HandshakeHandler, async_completion<HandshakeHandler,
void(error_code)> completion{handler}; void(error_code)> init{handler};
handshake_op<decltype(completion.handler)>{ handshake_op<BEAST_HANDLER_TYPE(
completion.handler, *this, nullptr, HandshakeHandler, void(error_code))>{
host, target, &default_decorate_req}; init.completion_handler, *this, nullptr, host,
return completion.result.get(); target, &default_decorate_req};
return init.result.get();
} }
template<class NextLayer> template<class NextLayer>
template<class HandshakeHandler> template<class HandshakeHandler>
typename async_completion<HandshakeHandler, BEAST_INITFN_RESULT_TYPE(
void(error_code)>::result_type HandshakeHandler, void(error_code))
stream<NextLayer>:: stream<NextLayer>::
async_handshake(response_type& res, async_handshake(response_type& res,
string_view const& host, string_view const& host,
@@ -189,18 +190,19 @@ async_handshake(response_type& res,
{ {
static_assert(is_AsyncStream<next_layer_type>::value, static_assert(is_AsyncStream<next_layer_type>::value,
"AsyncStream requirements not met"); "AsyncStream requirements not met");
beast::async_completion<HandshakeHandler, async_completion<HandshakeHandler,
void(error_code)> completion{handler}; void(error_code)> init{handler};
handshake_op<decltype(completion.handler)>{ handshake_op<BEAST_HANDLER_TYPE(
completion.handler, *this, &res, HandshakeHandler, void(error_code))>{
host, target, &default_decorate_req}; init.completion_handler, *this, &res, host,
return completion.result.get(); target, &default_decorate_req};
return init.result.get();
} }
template<class NextLayer> template<class NextLayer>
template<class RequestDecorator, class HandshakeHandler> template<class RequestDecorator, class HandshakeHandler>
typename async_completion<HandshakeHandler, BEAST_INITFN_RESULT_TYPE(
void(error_code)>::result_type HandshakeHandler, void(error_code))
stream<NextLayer>:: stream<NextLayer>::
async_handshake_ex(string_view const& host, async_handshake_ex(string_view const& host,
string_view const& target, string_view const& target,
@@ -212,18 +214,19 @@ async_handshake_ex(string_view const& host,
static_assert(detail::is_RequestDecorator< static_assert(detail::is_RequestDecorator<
RequestDecorator>::value, RequestDecorator>::value,
"RequestDecorator requirements not met"); "RequestDecorator requirements not met");
beast::async_completion<HandshakeHandler, async_completion<HandshakeHandler,
void(error_code)> completion{handler}; void(error_code)> init{handler};
handshake_op<decltype(completion.handler)>{ handshake_op<BEAST_HANDLER_TYPE(
completion.handler, *this, nullptr, HandshakeHandler, void(error_code))>{
host, target, decorator}; init.completion_handler, *this, nullptr, host,
return completion.result.get(); target, decorator};
return init.result.get();
} }
template<class NextLayer> template<class NextLayer>
template<class RequestDecorator, class HandshakeHandler> template<class RequestDecorator, class HandshakeHandler>
typename async_completion<HandshakeHandler, BEAST_INITFN_RESULT_TYPE(
void(error_code)>::result_type HandshakeHandler, void(error_code))
stream<NextLayer>:: stream<NextLayer>::
async_handshake_ex(response_type& res, async_handshake_ex(response_type& res,
string_view const& host, string_view const& host,
@@ -236,12 +239,13 @@ async_handshake_ex(response_type& res,
static_assert(detail::is_RequestDecorator< static_assert(detail::is_RequestDecorator<
RequestDecorator>::value, RequestDecorator>::value,
"RequestDecorator requirements not met"); "RequestDecorator requirements not met");
beast::async_completion<HandshakeHandler, async_completion<HandshakeHandler,
void(error_code)> completion{handler}; void(error_code)> init{handler};
handshake_op<decltype(completion.handler)>{ handshake_op<BEAST_HANDLER_TYPE(
completion.handler, *this, &res, HandshakeHandler, void(error_code))>{
host, target, decorator}; init.completion_handler, *this, &res, host,
return completion.result.get(); target, decorator};
return init.result.get();
} }
template<class NextLayer> template<class NextLayer>

View File

@@ -195,38 +195,36 @@ upcall:
template<class NextLayer> template<class NextLayer>
template<class WriteHandler> template<class WriteHandler>
typename async_completion< BEAST_INITFN_RESULT_TYPE(
WriteHandler, void(error_code)>::result_type WriteHandler, void(error_code))
stream<NextLayer>:: stream<NextLayer>::
async_ping(ping_data const& payload, WriteHandler&& handler) async_ping(ping_data const& payload, WriteHandler&& handler)
{ {
static_assert(is_AsyncStream<next_layer_type>::value, static_assert(is_AsyncStream<next_layer_type>::value,
"AsyncStream requirements requirements not met"); "AsyncStream requirements requirements not met");
beast::async_completion< async_completion<WriteHandler,
WriteHandler, void(error_code) void(error_code)> init{handler};
> completion{handler}; ping_op<BEAST_HANDLER_TYPE(
ping_op<decltype(completion.handler)>{ WriteHandler, void(error_code))>{
completion.handler, *this, init.completion_handler, *this, opcode::ping, payload};
opcode::ping, payload}; return init.result.get();
return completion.result.get();
} }
template<class NextLayer> template<class NextLayer>
template<class WriteHandler> template<class WriteHandler>
typename async_completion< BEAST_INITFN_RESULT_TYPE(
WriteHandler, void(error_code)>::result_type WriteHandler, void(error_code))
stream<NextLayer>:: stream<NextLayer>::
async_pong(ping_data const& payload, WriteHandler&& handler) async_pong(ping_data const& payload, WriteHandler&& handler)
{ {
static_assert(is_AsyncStream<next_layer_type>::value, static_assert(is_AsyncStream<next_layer_type>::value,
"AsyncStream requirements requirements not met"); "AsyncStream requirements requirements not met");
beast::async_completion< async_completion<WriteHandler,
WriteHandler, void(error_code) void(error_code)> init{handler};
> completion{handler}; ping_op<BEAST_HANDLER_TYPE(
ping_op<decltype(completion.handler)>{ WriteHandler, void(error_code))>{
completion.handler, *this, init.completion_handler, *this, opcode::pong, payload};
opcode::pong, payload}; return init.result.get();
return completion.result.get();
} }
template<class NextLayer> template<class NextLayer>

View File

@@ -686,21 +686,22 @@ upcall:
template<class NextLayer> template<class NextLayer>
template<class DynamicBuffer, class ReadHandler> template<class DynamicBuffer, class ReadHandler>
typename async_completion< BEAST_INITFN_RESULT_TYPE(
ReadHandler, void(error_code)>::result_type ReadHandler, void(error_code))
stream<NextLayer>:: stream<NextLayer>::
async_read_frame(frame_info& fi, async_read_frame(frame_info& fi,
DynamicBuffer& dynabuf, ReadHandler&& handler) DynamicBuffer& dynabuf, ReadHandler&& handler)
{ {
static_assert(is_AsyncStream<next_layer_type>::value, static_assert(is_AsyncStream<next_layer_type>::value,
"AsyncStream requirements requirements not met"); "AsyncStream requirements requirements not met");
static_assert(beast::is_DynamicBuffer<DynamicBuffer>::value, static_assert(beast::is_dynamic_buffer<DynamicBuffer>::value,
"DynamicBuffer requirements not met"); "DynamicBuffer requirements not met");
beast::async_completion< async_completion<ReadHandler,
ReadHandler, void(error_code)> completion{handler}; void(error_code)> init{handler};
read_frame_op<DynamicBuffer, decltype(completion.handler)>{ read_frame_op<DynamicBuffer, BEAST_HANDLER_TYPE(
completion.handler, *this, fi, dynabuf}; ReadHandler, void(error_code))>{init.completion_handler,
return completion.result.get(); *this, fi, dynabuf};
return init.result.get();
} }
template<class NextLayer> template<class NextLayer>
@@ -711,7 +712,7 @@ read_frame(frame_info& fi, DynamicBuffer& dynabuf)
{ {
static_assert(is_SyncStream<next_layer_type>::value, static_assert(is_SyncStream<next_layer_type>::value,
"SyncStream requirements not met"); "SyncStream requirements not met");
static_assert(beast::is_DynamicBuffer<DynamicBuffer>::value, static_assert(beast::is_dynamic_buffer<DynamicBuffer>::value,
"DynamicBuffer requirements not met"); "DynamicBuffer requirements not met");
error_code ec; error_code ec;
read_frame(fi, dynabuf, ec); read_frame(fi, dynabuf, ec);
@@ -727,7 +728,7 @@ read_frame(frame_info& fi, DynamicBuffer& dynabuf, error_code& ec)
{ {
static_assert(is_SyncStream<next_layer_type>::value, static_assert(is_SyncStream<next_layer_type>::value,
"SyncStream requirements not met"); "SyncStream requirements not met");
static_assert(beast::is_DynamicBuffer<DynamicBuffer>::value, static_assert(beast::is_dynamic_buffer<DynamicBuffer>::value,
"DynamicBuffer requirements not met"); "DynamicBuffer requirements not met");
using beast::detail::clamp; using beast::detail::clamp;
using boost::asio::buffer; using boost::asio::buffer;
@@ -1097,22 +1098,22 @@ upcall:
template<class NextLayer> template<class NextLayer>
template<class DynamicBuffer, class ReadHandler> template<class DynamicBuffer, class ReadHandler>
typename async_completion< BEAST_INITFN_RESULT_TYPE(
ReadHandler, void(error_code)>::result_type ReadHandler, void(error_code))
stream<NextLayer>:: stream<NextLayer>::
async_read(opcode& op, async_read(opcode& op,
DynamicBuffer& dynabuf, ReadHandler&& handler) DynamicBuffer& dynabuf, ReadHandler&& handler)
{ {
static_assert(is_AsyncStream<next_layer_type>::value, static_assert(is_AsyncStream<next_layer_type>::value,
"AsyncStream requirements requirements not met"); "AsyncStream requirements requirements not met");
static_assert(beast::is_DynamicBuffer<DynamicBuffer>::value, static_assert(beast::is_dynamic_buffer<DynamicBuffer>::value,
"DynamicBuffer requirements not met"); "DynamicBuffer requirements not met");
beast::async_completion< async_completion<ReadHandler,
ReadHandler, void(error_code) void(error_code)> init{handler};
> completion{handler}; read_op<DynamicBuffer, BEAST_HANDLER_TYPE(
read_op<DynamicBuffer, decltype(completion.handler)>{ ReadHandler, void(error_code))>{init.completion_handler,
completion.handler, *this, op, dynabuf}; *this, op, dynabuf};
return completion.result.get(); return init.result.get();
} }
template<class NextLayer> template<class NextLayer>
@@ -1123,7 +1124,7 @@ read(opcode& op, DynamicBuffer& dynabuf)
{ {
static_assert(is_SyncStream<next_layer_type>::value, static_assert(is_SyncStream<next_layer_type>::value,
"SyncStream requirements not met"); "SyncStream requirements not met");
static_assert(beast::is_DynamicBuffer<DynamicBuffer>::value, static_assert(beast::is_dynamic_buffer<DynamicBuffer>::value,
"DynamicBuffer requirements not met"); "DynamicBuffer requirements not met");
error_code ec; error_code ec;
read(op, dynabuf, ec); read(op, dynabuf, ec);
@@ -1139,7 +1140,7 @@ read(opcode& op, DynamicBuffer& dynabuf, error_code& ec)
{ {
static_assert(is_SyncStream<next_layer_type>::value, static_assert(is_SyncStream<next_layer_type>::value,
"SyncStream requirements not met"); "SyncStream requirements not met");
static_assert(beast::is_DynamicBuffer<DynamicBuffer>::value, static_assert(beast::is_dynamic_buffer<DynamicBuffer>::value,
"DynamicBuffer requirements not met"); "DynamicBuffer requirements not met");
frame_info fi; frame_info fi;
for(;;) for(;;)

View File

@@ -8,7 +8,7 @@
#ifndef BEAST_WEBSOCKET_IMPL_SSL_IPP_INCLUDED #ifndef BEAST_WEBSOCKET_IMPL_SSL_IPP_INCLUDED
#define BEAST_WEBSOCKET_IMPL_SSL_IPP_INCLUDED #define BEAST_WEBSOCKET_IMPL_SSL_IPP_INCLUDED
#include <beast/core/async_completion.hpp> #include <beast/core/async_result.hpp>
#include <beast/core/handler_helpers.hpp> #include <beast/core/handler_helpers.hpp>
#include <beast/core/handler_concepts.hpp> #include <beast/core/handler_concepts.hpp>
#include <beast/core/handler_ptr.hpp> #include <beast/core/handler_ptr.hpp>

View File

@@ -8,7 +8,7 @@
#ifndef BEAST_WEBSOCKET_IMPL_TEARDOWN_IPP #ifndef BEAST_WEBSOCKET_IMPL_TEARDOWN_IPP
#define BEAST_WEBSOCKET_IMPL_TEARDOWN_IPP #define BEAST_WEBSOCKET_IMPL_TEARDOWN_IPP
#include <beast/core/async_completion.hpp> #include <beast/core/async_result.hpp>
#include <beast/core/handler_concepts.hpp> #include <beast/core/handler_concepts.hpp>
#include <beast/core/handler_helpers.hpp> #include <beast/core/handler_helpers.hpp>
#include <beast/core/handler_ptr.hpp> #include <beast/core/handler_ptr.hpp>

View File

@@ -545,24 +545,23 @@ upcall:
template<class NextLayer> template<class NextLayer>
template<class ConstBufferSequence, class WriteHandler> template<class ConstBufferSequence, class WriteHandler>
typename async_completion< BEAST_INITFN_RESULT_TYPE(
WriteHandler, void(error_code)>::result_type WriteHandler, void(error_code))
stream<NextLayer>:: stream<NextLayer>::
async_write_frame(bool fin, async_write_frame(bool fin,
ConstBufferSequence const& bs, WriteHandler&& handler) ConstBufferSequence const& bs, WriteHandler&& handler)
{ {
static_assert(is_AsyncStream<next_layer_type>::value, static_assert(is_AsyncStream<next_layer_type>::value,
"AsyncStream requirements not met"); "AsyncStream requirements not met");
static_assert(beast::is_ConstBufferSequence< static_assert(beast::is_const_buffer_sequence<
ConstBufferSequence>::value, ConstBufferSequence>::value,
"ConstBufferSequence requirements not met"); "ConstBufferSequence requirements not met");
beast::async_completion< async_completion<WriteHandler,
WriteHandler, void(error_code) void(error_code)> init{handler};
> completion{handler}; write_frame_op<ConstBufferSequence, BEAST_HANDLER_TYPE(
write_frame_op<ConstBufferSequence, decltype( WriteHandler, void(error_code))>{init.completion_handler,
completion.handler)>{completion.handler,
*this, fin, bs}; *this, fin, bs};
return completion.result.get(); return init.result.get();
} }
template<class NextLayer> template<class NextLayer>
@@ -573,7 +572,7 @@ write_frame(bool fin, ConstBufferSequence const& buffers)
{ {
static_assert(is_SyncStream<next_layer_type>::value, static_assert(is_SyncStream<next_layer_type>::value,
"SyncStream requirements not met"); "SyncStream requirements not met");
static_assert(beast::is_ConstBufferSequence< static_assert(beast::is_const_buffer_sequence<
ConstBufferSequence>::value, ConstBufferSequence>::value,
"ConstBufferSequence requirements not met"); "ConstBufferSequence requirements not met");
error_code ec; error_code ec;
@@ -591,7 +590,7 @@ write_frame(bool fin,
{ {
static_assert(is_SyncStream<next_layer_type>::value, static_assert(is_SyncStream<next_layer_type>::value,
"SyncStream requirements not met"); "SyncStream requirements not met");
static_assert(beast::is_ConstBufferSequence< static_assert(beast::is_const_buffer_sequence<
ConstBufferSequence>::value, ConstBufferSequence>::value,
"ConstBufferSequence requirements not met"); "ConstBufferSequence requirements not met");
using beast::detail::clamp; using beast::detail::clamp;
@@ -896,21 +895,22 @@ operator()(error_code ec, bool again)
template<class NextLayer> template<class NextLayer>
template<class ConstBufferSequence, class WriteHandler> template<class ConstBufferSequence, class WriteHandler>
typename async_completion< BEAST_INITFN_RESULT_TYPE(
WriteHandler, void(error_code)>::result_type WriteHandler, void(error_code))
stream<NextLayer>:: stream<NextLayer>::
async_write(ConstBufferSequence const& bs, WriteHandler&& handler) async_write(ConstBufferSequence const& bs, WriteHandler&& handler)
{ {
static_assert(is_AsyncStream<next_layer_type>::value, static_assert(is_AsyncStream<next_layer_type>::value,
"AsyncStream requirements not met"); "AsyncStream requirements not met");
static_assert(beast::is_ConstBufferSequence< static_assert(beast::is_const_buffer_sequence<
ConstBufferSequence>::value, ConstBufferSequence>::value,
"ConstBufferSequence requirements not met"); "ConstBufferSequence requirements not met");
beast::async_completion< async_completion<WriteHandler,
WriteHandler, void(error_code)> completion{handler}; void(error_code)> init{handler};
write_op<ConstBufferSequence, decltype(completion.handler)>{ write_op<ConstBufferSequence, BEAST_HANDLER_TYPE(
completion.handler, *this, bs}; WriteHandler, void(error_code))>{
return completion.result.get(); init.completion_handler, *this, bs};
return init.result.get();
} }
template<class NextLayer> template<class NextLayer>
@@ -921,7 +921,7 @@ write(ConstBufferSequence const& buffers)
{ {
static_assert(is_SyncStream<next_layer_type>::value, static_assert(is_SyncStream<next_layer_type>::value,
"SyncStream requirements not met"); "SyncStream requirements not met");
static_assert(beast::is_ConstBufferSequence< static_assert(beast::is_const_buffer_sequence<
ConstBufferSequence>::value, ConstBufferSequence>::value,
"ConstBufferSequence requirements not met"); "ConstBufferSequence requirements not met");
error_code ec; error_code ec;
@@ -938,7 +938,7 @@ write(ConstBufferSequence const& buffers, error_code& ec)
{ {
static_assert(is_SyncStream<next_layer_type>::value, static_assert(is_SyncStream<next_layer_type>::value,
"SyncStream requirements not met"); "SyncStream requirements not met");
static_assert(beast::is_ConstBufferSequence< static_assert(beast::is_const_buffer_sequence<
ConstBufferSequence>::value, ConstBufferSequence>::value,
"ConstBufferSequence requirements not met"); "ConstBufferSequence requirements not met");
write_frame(true, buffers, ec); write_frame(true, buffers, ec);

View File

@@ -14,7 +14,7 @@
#include <beast/websocket/detail/stream_base.hpp> #include <beast/websocket/detail/stream_base.hpp>
#include <beast/http/message.hpp> #include <beast/http/message.hpp>
#include <beast/http/string_body.hpp> #include <beast/http/string_body.hpp>
#include <beast/core/async_completion.hpp> #include <beast/core/async_result.hpp>
#include <beast/core/buffered_read_stream.hpp> #include <beast/core/buffered_read_stream.hpp>
#include <beast/core/string_view.hpp> #include <beast/core/string_view.hpp>
#include <beast/core/detail/get_lowest_layer.hpp> #include <beast/core/detail/get_lowest_layer.hpp>
@@ -970,12 +970,8 @@ public:
manner equivalent to using `boost::asio::io_service::post`. manner equivalent to using `boost::asio::io_service::post`.
*/ */
template<class AcceptHandler> template<class AcceptHandler>
#if BEAST_DOXYGEN BEAST_INITFN_RESULT_TYPE(
void_or_deduced AcceptHandler, void(error_code))
#else
typename async_completion<
AcceptHandler, void(error_code)>::result_type
#endif
async_accept(AcceptHandler&& handler); async_accept(AcceptHandler&& handler);
/** Start reading and responding to a WebSocket HTTP Upgrade request. /** Start reading and responding to a WebSocket HTTP Upgrade request.
@@ -1029,12 +1025,8 @@ public:
manner equivalent to using `boost::asio::io_service::post`. manner equivalent to using `boost::asio::io_service::post`.
*/ */
template<class ResponseDecorator, class AcceptHandler> template<class ResponseDecorator, class AcceptHandler>
#if BEAST_DOXYGEN BEAST_INITFN_RESULT_TYPE(
void_or_deduced AcceptHandler, void(error_code))
#else
typename async_completion<
AcceptHandler, void(error_code)>::result_type
#endif
async_accept_ex(ResponseDecorator const& decorator, async_accept_ex(ResponseDecorator const& decorator,
AcceptHandler&& handler); AcceptHandler&& handler);
@@ -1087,12 +1079,8 @@ public:
manner equivalent to using `boost::asio::io_service::post`. manner equivalent to using `boost::asio::io_service::post`.
*/ */
template<class ConstBufferSequence, class AcceptHandler> template<class ConstBufferSequence, class AcceptHandler>
#if BEAST_DOXYGEN BEAST_INITFN_RESULT_TYPE(
void_or_deduced AcceptHandler, void(error_code))
#else
typename async_completion<AcceptHandler,
void(error_code)>::result_type
#endif
async_accept(ConstBufferSequence const& buffers, async_accept(ConstBufferSequence const& buffers,
AcceptHandler&& handler); AcceptHandler&& handler);
@@ -1155,12 +1143,8 @@ public:
*/ */
template<class ConstBufferSequence, template<class ConstBufferSequence,
class ResponseDecorator, class AcceptHandler> class ResponseDecorator, class AcceptHandler>
#if BEAST_DOXYGEN BEAST_INITFN_RESULT_TYPE(
void_or_deduced AcceptHandler, void(error_code))
#else
typename async_completion<AcceptHandler,
void(error_code)>::result_type
#endif
async_accept_ex(ConstBufferSequence const& buffers, async_accept_ex(ConstBufferSequence const& buffers,
ResponseDecorator const& decorator, ResponseDecorator const& decorator,
AcceptHandler&& handler); AcceptHandler&& handler);
@@ -1211,12 +1195,8 @@ public:
manner equivalent to using `boost::asio::io_service::post`. manner equivalent to using `boost::asio::io_service::post`.
*/ */
template<class Fields, class AcceptHandler> template<class Fields, class AcceptHandler>
#if BEAST_DOXYGEN BEAST_INITFN_RESULT_TYPE(
void_or_deduced AcceptHandler, void(error_code))
#else
typename async_completion<AcceptHandler,
void(error_code)>::result_type
#endif
async_accept(http::header<true, Fields> const& req, async_accept(http::header<true, Fields> const& req,
AcceptHandler&& handler); AcceptHandler&& handler);
@@ -1276,12 +1256,8 @@ public:
*/ */
template<class Fields, template<class Fields,
class ResponseDecorator, class AcceptHandler> class ResponseDecorator, class AcceptHandler>
#if BEAST_DOXYGEN BEAST_INITFN_RESULT_TYPE(
void_or_deduced AcceptHandler, void(error_code))
#else
typename async_completion<AcceptHandler,
void(error_code)>::result_type
#endif
async_accept_ex(http::header<true, Fields> const& req, async_accept_ex(http::header<true, Fields> const& req,
ResponseDecorator const& decorator, ResponseDecorator const& decorator,
AcceptHandler&& handler); AcceptHandler&& handler);
@@ -1340,12 +1316,8 @@ public:
*/ */
template<class Fields, template<class Fields,
class ConstBufferSequence, class AcceptHandler> class ConstBufferSequence, class AcceptHandler>
#if BEAST_DOXYGEN BEAST_INITFN_RESULT_TYPE(
void_or_deduced AcceptHandler, void(error_code))
#else
typename async_completion<AcceptHandler,
void(error_code)>::result_type
#endif
async_accept(http::header<true, Fields> const& req, async_accept(http::header<true, Fields> const& req,
ConstBufferSequence const& buffers, ConstBufferSequence const& buffers,
AcceptHandler&& handler); AcceptHandler&& handler);
@@ -1413,12 +1385,8 @@ public:
*/ */
template<class Fields, class ConstBufferSequence, template<class Fields, class ConstBufferSequence,
class ResponseDecorator, class AcceptHandler> class ResponseDecorator, class AcceptHandler>
#if BEAST_DOXYGEN BEAST_INITFN_RESULT_TYPE(
void_or_deduced AcceptHandler, void(error_code))
#else
typename async_completion<AcceptHandler,
void(error_code)>::result_type
#endif
async_accept_ex(http::header<true, Fields> const& req, async_accept_ex(http::header<true, Fields> const& req,
ConstBufferSequence const& buffers, ConstBufferSequence const& buffers,
ResponseDecorator const& decorator, ResponseDecorator const& decorator,
@@ -1895,12 +1863,8 @@ public:
manner equivalent to using `boost::asio::io_service::post`. manner equivalent to using `boost::asio::io_service::post`.
*/ */
template<class HandshakeHandler> template<class HandshakeHandler>
#if BEAST_DOXYGEN BEAST_INITFN_RESULT_TYPE(
void_or_deduced HandshakeHandler, void(error_code))
#else
typename async_completion<HandshakeHandler,
void(error_code)>::result_type
#endif
async_handshake(string_view const& host, async_handshake(string_view const& host,
string_view const& target, string_view const& target,
HandshakeHandler&& handler); HandshakeHandler&& handler);
@@ -1951,12 +1915,8 @@ public:
manner equivalent to using `boost::asio::io_service::post`. manner equivalent to using `boost::asio::io_service::post`.
*/ */
template<class HandshakeHandler> template<class HandshakeHandler>
#if BEAST_DOXYGEN BEAST_INITFN_RESULT_TYPE(
void_or_deduced HandshakeHandler, void(error_code))
#else
typename async_completion<HandshakeHandler,
void(error_code)>::result_type
#endif
async_handshake(response_type& res, async_handshake(response_type& res,
string_view const& host, string_view const& host,
string_view const& target, string_view const& target,
@@ -2013,12 +1973,8 @@ public:
manner equivalent to using `boost::asio::io_service::post`. manner equivalent to using `boost::asio::io_service::post`.
*/ */
template<class RequestDecorator, class HandshakeHandler> template<class RequestDecorator, class HandshakeHandler>
#if BEAST_DOXYGEN BEAST_INITFN_RESULT_TYPE(
void_or_deduced HandshakeHandler, void(error_code))
#else
typename async_completion<HandshakeHandler,
void(error_code)>::result_type
#endif
async_handshake_ex(string_view const& host, async_handshake_ex(string_view const& host,
string_view const& target, string_view const& target,
RequestDecorator const& decorator, RequestDecorator const& decorator,
@@ -2079,12 +2035,8 @@ public:
manner equivalent to using `boost::asio::io_service::post`. manner equivalent to using `boost::asio::io_service::post`.
*/ */
template<class RequestDecorator, class HandshakeHandler> template<class RequestDecorator, class HandshakeHandler>
#if BEAST_DOXYGEN BEAST_INITFN_RESULT_TYPE(
void_or_deduced HandshakeHandler, void(error_code))
#else
typename async_completion<HandshakeHandler,
void(error_code)>::result_type
#endif
async_handshake_ex(response_type& res, async_handshake_ex(response_type& res,
string_view const& host, string_view const& host,
string_view const& target, string_view const& target,
@@ -2193,12 +2145,8 @@ public:
manner equivalent to using `boost::asio::io_service::post`. manner equivalent to using `boost::asio::io_service::post`.
*/ */
template<class CloseHandler> template<class CloseHandler>
#if BEAST_DOXYGEN BEAST_INITFN_RESULT_TYPE(
void_or_deduced CloseHandler, void(error_code))
#else
typename async_completion<
CloseHandler, void(error_code)>::result_type
#endif
async_close(close_reason const& cr, CloseHandler&& handler); async_close(close_reason const& cr, CloseHandler&& handler);
/** Send a WebSocket ping frame. /** Send a WebSocket ping frame.
@@ -2275,12 +2223,8 @@ public:
manner equivalent to using `boost::asio::io_service::post`. manner equivalent to using `boost::asio::io_service::post`.
*/ */
template<class WriteHandler> template<class WriteHandler>
#if BEAST_DOXYGEN BEAST_INITFN_RESULT_TYPE(
void_or_deduced WriteHandler, void(error_code))
#else
typename async_completion<
WriteHandler, void(error_code)>::result_type
#endif
async_ping(ping_data const& payload, WriteHandler&& handler); async_ping(ping_data const& payload, WriteHandler&& handler);
/** Send a WebSocket pong frame. /** Send a WebSocket pong frame.
@@ -2372,12 +2316,8 @@ public:
manner equivalent to using `boost::asio::io_service::post`. manner equivalent to using `boost::asio::io_service::post`.
*/ */
template<class WriteHandler> template<class WriteHandler>
#if BEAST_DOXYGEN BEAST_INITFN_RESULT_TYPE(
void_or_deduced WriteHandler, void(error_code))
#else
typename async_completion<
WriteHandler, void(error_code)>::result_type
#endif
async_pong(ping_data const& payload, WriteHandler&& handler); async_pong(ping_data const& payload, WriteHandler&& handler);
/** Read a message from the stream. /** Read a message from the stream.
@@ -2520,12 +2460,8 @@ public:
manner equivalent to using `boost::asio::io_service::post`. manner equivalent to using `boost::asio::io_service::post`.
*/ */
template<class DynamicBuffer, class ReadHandler> template<class DynamicBuffer, class ReadHandler>
#if BEAST_DOXYGEN BEAST_INITFN_RESULT_TYPE(
void_or_deduced ReadHandler, void(error_code))
#else
typename async_completion<
ReadHandler, void(error_code)>::result_type
#endif
async_read(opcode& op, DynamicBuffer& dynabuf, ReadHandler&& handler); async_read(opcode& op, DynamicBuffer& dynabuf, ReadHandler&& handler);
/** Read a message frame from the stream. /** Read a message frame from the stream.
@@ -2678,12 +2614,8 @@ public:
manner equivalent to using boost::asio::io_service::post(). manner equivalent to using boost::asio::io_service::post().
*/ */
template<class DynamicBuffer, class ReadHandler> template<class DynamicBuffer, class ReadHandler>
#if BEAST_DOXYGEN BEAST_INITFN_RESULT_TYPE(
void_or_deduced ReadHandler, void(error_code))
#else
typename async_completion<
ReadHandler, void(error_code)>::result_type
#endif
async_read_frame(frame_info& fi, async_read_frame(frame_info& fi,
DynamicBuffer& dynabuf, ReadHandler&& handler); DynamicBuffer& dynabuf, ReadHandler&& handler);
@@ -2804,12 +2736,8 @@ public:
manner equivalent to using `boost::asio::io_service::post`. manner equivalent to using `boost::asio::io_service::post`.
*/ */
template<class ConstBufferSequence, class WriteHandler> template<class ConstBufferSequence, class WriteHandler>
#if BEAST_DOXYGEN BEAST_INITFN_RESULT_TYPE(
void_or_deduced WriteHandler, void(error_code))
#else
typename async_completion<
WriteHandler, void(error_code)>::result_type
#endif
async_write(ConstBufferSequence const& buffers, async_write(ConstBufferSequence const& buffers,
WriteHandler&& handler); WriteHandler&& handler);
@@ -2920,12 +2848,8 @@ public:
); @endcode ); @endcode
*/ */
template<class ConstBufferSequence, class WriteHandler> template<class ConstBufferSequence, class WriteHandler>
#if BEAST_DOXYGEN BEAST_INITFN_RESULT_TYPE(
void_or_deduced WriteHandler, void(error_code))
#else
typename async_completion<
WriteHandler, void(error_code)>::result_type
#endif
async_write_frame(bool fin, async_write_frame(bool fin,
ConstBufferSequence const& buffers, WriteHandler&& handler); ConstBufferSequence const& buffers, WriteHandler&& handler);

View File

@@ -16,7 +16,7 @@ compile zlib.cpp : : ;
unit-test core-tests : unit-test core-tests :
../extras/beast/unit_test/main.cpp ../extras/beast/unit_test/main.cpp
core/async_completion.cpp core/async_result.cpp
core/bind_handler.cpp core/bind_handler.cpp
core/buffer_cat.cpp core/buffer_cat.cpp
core/buffer_concepts.cpp core/buffer_concepts.cpp

View File

@@ -9,7 +9,7 @@ add_executable (core-tests
${EXTRAS_INCLUDES} ${EXTRAS_INCLUDES}
../../extras/beast/unit_test/main.cpp ../../extras/beast/unit_test/main.cpp
buffer_test.hpp buffer_test.hpp
async_completion.cpp async_result.cpp
bind_handler.cpp bind_handler.cpp
buffer_cat.cpp buffer_cat.cpp
buffer_concepts.cpp buffer_concepts.cpp

View File

@@ -6,4 +6,4 @@
// //
// Test that header file is self-contained. // Test that header file is self-contained.
#include <beast/core/async_completion.hpp> #include <beast/core/async_result.hpp>

View File

@@ -16,10 +16,10 @@ struct T
}; };
} }
static_assert(is_ConstBufferSequence<detail::ConstBufferSequence>::value, ""); static_assert(is_const_buffer_sequence<detail::ConstBufferSequence>::value, "");
static_assert(! is_ConstBufferSequence<T>::value, ""); static_assert(! is_const_buffer_sequence<T>::value, "");
static_assert(is_MutableBufferSequence<detail::MutableBufferSequence>::value, ""); static_assert(is_mutable_buffer_sequence<detail::MutableBufferSequence>::value, "");
static_assert(! is_MutableBufferSequence<T>::value, ""); static_assert(! is_mutable_buffer_sequence<T>::value, "");
} // beast } // beast

View File

@@ -18,7 +18,7 @@ namespace test {
template<class ConstBufferSequence> template<class ConstBufferSequence>
typename std::enable_if< typename std::enable_if<
is_ConstBufferSequence<ConstBufferSequence>::value, is_const_buffer_sequence<ConstBufferSequence>::value,
std::size_t>::type std::size_t>::type
buffer_count(ConstBufferSequence const& buffers) buffer_count(ConstBufferSequence const& buffers)
{ {
@@ -27,7 +27,7 @@ buffer_count(ConstBufferSequence const& buffers)
template<class ConstBufferSequence> template<class ConstBufferSequence>
typename std::enable_if< typename std::enable_if<
is_ConstBufferSequence<ConstBufferSequence>::value, is_const_buffer_sequence<ConstBufferSequence>::value,
std::size_t>::type std::size_t>::type
size_pre(ConstBufferSequence const& buffers) size_pre(ConstBufferSequence const& buffers)
{ {
@@ -46,7 +46,7 @@ size_pre(ConstBufferSequence const& buffers)
template<class ConstBufferSequence> template<class ConstBufferSequence>
typename std::enable_if< typename std::enable_if<
is_ConstBufferSequence<ConstBufferSequence>::value, is_const_buffer_sequence<ConstBufferSequence>::value,
std::size_t>::type std::size_t>::type
size_post(ConstBufferSequence const& buffers) size_post(ConstBufferSequence const& buffers)
{ {
@@ -58,7 +58,7 @@ size_post(ConstBufferSequence const& buffers)
template<class ConstBufferSequence> template<class ConstBufferSequence>
typename std::enable_if< typename std::enable_if<
is_ConstBufferSequence<ConstBufferSequence>::value, is_const_buffer_sequence<ConstBufferSequence>::value,
std::size_t>::type std::size_t>::type
size_rev_pre(ConstBufferSequence const& buffers) size_rev_pre(ConstBufferSequence const& buffers)
{ {
@@ -70,7 +70,7 @@ size_rev_pre(ConstBufferSequence const& buffers)
template<class ConstBufferSequence> template<class ConstBufferSequence>
typename std::enable_if< typename std::enable_if<
is_ConstBufferSequence<ConstBufferSequence>::value, is_const_buffer_sequence<ConstBufferSequence>::value,
std::size_t>::type std::size_t>::type
size_rev_post(ConstBufferSequence const& buffers) size_rev_post(ConstBufferSequence const& buffers)
{ {

View File

@@ -17,7 +17,7 @@
namespace beast { namespace beast {
static_assert(is_DynamicBuffer<flat_buffer>::value, static_assert(is_dynamic_buffer<flat_buffer>::value,
"DynamicBuffer requirements not met"); "DynamicBuffer requirements not met");
class flat_buffer_test : public beast::unit_test::suite class flat_buffer_test : public beast::unit_test::suite

View File

@@ -21,7 +21,7 @@
namespace beast { namespace beast {
static_assert(is_DynamicBuffer<multi_buffer>::value, ""); static_assert(is_dynamic_buffer<multi_buffer>::value, "");
class multi_buffer_test : public beast::unit_test::suite class multi_buffer_test : public beast::unit_test::suite
{ {

View File

@@ -482,7 +482,7 @@ std::size_t
nodejs_basic_parser<Derived>::write( nodejs_basic_parser<Derived>::write(
ConstBufferSequence const& buffers, error_code& ec) ConstBufferSequence const& buffers, error_code& ec)
{ {
static_assert(beast::is_ConstBufferSequence< static_assert(beast::is_const_buffer_sequence<
ConstBufferSequence>::value, ConstBufferSequence>::value,
"ConstBufferSequence requirements not met"); "ConstBufferSequence requirements not met");
using boost::asio::buffer_cast; using boost::asio::buffer_cast;