mirror of
https://github.com/boostorg/beast.git
synced 2025-07-29 20:37:31 +02:00
committed by
Mohammad Nejati
parent
f60f7c152f
commit
78478557f6
@ -177,7 +177,8 @@ template<
|
|||||||
>
|
>
|
||||||
class async_base
|
class async_base
|
||||||
#if ! BOOST_BEAST_DOXYGEN
|
#if ! BOOST_BEAST_DOXYGEN
|
||||||
: private boost::empty_value<Allocator>
|
: public detail::with_immediate_executor_type<Handler>
|
||||||
|
, private boost::empty_value<Allocator>
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
static_assert(
|
static_assert(
|
||||||
@ -193,7 +194,7 @@ public:
|
|||||||
If a class derived from @ref boost::beast::async_base is a completion
|
If a class derived from @ref boost::beast::async_base is a completion
|
||||||
handler, then the associated executor of the derived class will
|
handler, then the associated executor of the derived class will
|
||||||
be this type.
|
be this type.
|
||||||
*/
|
*/
|
||||||
using executor_type =
|
using executor_type =
|
||||||
#if BOOST_BEAST_DOXYGEN
|
#if BOOST_BEAST_DOXYGEN
|
||||||
__implementation_defined__;
|
__implementation_defined__;
|
||||||
@ -210,19 +211,12 @@ public:
|
|||||||
If a class derived from @ref boost::beast::async_base is a completion
|
If a class derived from @ref boost::beast::async_base is a completion
|
||||||
handler, then the associated immediage executor of the derived class will
|
handler, then the associated immediage executor of the derived class will
|
||||||
be this type.
|
be this type.
|
||||||
*/
|
*/
|
||||||
using immediate_executor_type =
|
|
||||||
#if BOOST_BEAST_DOXYGEN
|
#if BOOST_BEAST_DOXYGEN
|
||||||
|
using immediate_executor_type =
|
||||||
__implementation_defined__;
|
__implementation_defined__;
|
||||||
#else
|
|
||||||
typename
|
|
||||||
net::associated_immediate_executor<
|
|
||||||
Handler,
|
|
||||||
typename detail::select_work_guard_t<Executor1>::executor_type
|
|
||||||
>::type;
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
virtual
|
virtual
|
||||||
@ -333,8 +327,10 @@ public:
|
|||||||
handler, then the object returned from this function will be used
|
handler, then the object returned from this function will be used
|
||||||
as the associated immediate executor of the derived class.
|
as the associated immediate executor of the derived class.
|
||||||
*/
|
*/
|
||||||
immediate_executor_type
|
auto
|
||||||
get_immediate_executor() const noexcept
|
get_immediate_executor() const noexcept
|
||||||
|
-> decltype(net::get_associated_immediate_executor(
|
||||||
|
h_, wg1_.get_executor()))
|
||||||
{
|
{
|
||||||
return net::get_associated_immediate_executor(
|
return net::get_associated_immediate_executor(
|
||||||
h_, wg1_.get_executor());
|
h_, wg1_.get_executor());
|
||||||
|
@ -10,7 +10,9 @@
|
|||||||
#ifndef BOOST_BEAST_CORE_DETAIL_ASYNC_BASE_HPP
|
#ifndef BOOST_BEAST_CORE_DETAIL_ASYNC_BASE_HPP
|
||||||
#define BOOST_BEAST_CORE_DETAIL_ASYNC_BASE_HPP
|
#define BOOST_BEAST_CORE_DETAIL_ASYNC_BASE_HPP
|
||||||
|
|
||||||
#include <boost/core/exchange.hpp>
|
#include <boost/beast/core/detail/type_traits.hpp>
|
||||||
|
|
||||||
|
#include <boost/asio/associated_immediate_executor.hpp>
|
||||||
|
|
||||||
namespace boost {
|
namespace boost {
|
||||||
namespace beast {
|
namespace beast {
|
||||||
@ -39,6 +41,18 @@ protected:
|
|||||||
virtual void destroy() = 0;
|
virtual void destroy() = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
template<typename Handler, typename = void>
|
||||||
|
struct with_immediate_executor_type
|
||||||
|
{
|
||||||
|
};
|
||||||
|
|
||||||
|
template<typename Handler>
|
||||||
|
struct with_immediate_executor_type<Handler,
|
||||||
|
void_t<typename Handler::immediate_executor_type>>
|
||||||
|
{
|
||||||
|
using immediate_executor_type = typename Handler::immediate_executor_type;
|
||||||
|
};
|
||||||
|
|
||||||
} // detail
|
} // detail
|
||||||
} // beast
|
} // beast
|
||||||
} // boost
|
} // boost
|
||||||
|
Reference in New Issue
Block a user