mirror of
https://github.com/boostorg/beast.git
synced 2025-08-02 14:24:31 +02:00
Refactor get_io_context
This commit is contained in:
@@ -34,7 +34,7 @@ inline
|
|||||||
net::io_context*
|
net::io_context*
|
||||||
get_io_context(net::io_context::executor_type const& ex)
|
get_io_context(net::io_context::executor_type const& ex)
|
||||||
{
|
{
|
||||||
return std::addressof(ex.context());
|
return std::addressof(net::query(ex, net::execution::context));
|
||||||
}
|
}
|
||||||
|
|
||||||
inline
|
inline
|
||||||
@@ -42,8 +42,7 @@ net::io_context*
|
|||||||
get_io_context(net::strand<
|
get_io_context(net::strand<
|
||||||
net::io_context::executor_type> const& ex)
|
net::io_context::executor_type> const& ex)
|
||||||
{
|
{
|
||||||
return std::addressof(
|
return get_io_context(ex.get_inner_executor());
|
||||||
ex.get_inner_executor().context());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
template<class Executor>
|
template<class Executor>
|
||||||
@@ -64,7 +63,7 @@ get_io_context(T const& ex)
|
|||||||
net::io_context::executor_type>();
|
net::io_context::executor_type>();
|
||||||
if(! p)
|
if(! p)
|
||||||
return nullptr;
|
return nullptr;
|
||||||
return std::addressof(p->context());
|
return get_io_context(*p);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline
|
inline
|
||||||
|
@@ -80,7 +80,11 @@ public:
|
|||||||
class test_executor
|
class test_executor
|
||||||
{
|
{
|
||||||
bind_handler_test& s_;
|
bind_handler_test& s_;
|
||||||
|
#if defined(BOOST_ASIO_NO_TS_EXECUTORS)
|
||||||
net::any_io_executor ex_;
|
net::any_io_executor ex_;
|
||||||
|
#else
|
||||||
|
net::io_context::executor_type ex_;
|
||||||
|
#endif
|
||||||
|
|
||||||
// Storing the blocking property as a member is not strictly necessary,
|
// Storing the blocking property as a member is not strictly necessary,
|
||||||
// as we could simply forward the calls
|
// as we could simply forward the calls
|
||||||
@@ -118,6 +122,7 @@ public:
|
|||||||
return ex_ != other.ex_;
|
return ex_ != other.ex_;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if defined(BOOST_ASIO_NO_TS_EXECUTORS)
|
||||||
net::execution_context& query(net::execution::context_t c) const noexcept
|
net::execution_context& query(net::execution::context_t c) const noexcept
|
||||||
{
|
{
|
||||||
return net::query(ex_, c);
|
return net::query(ex_, c);
|
||||||
@@ -176,6 +181,7 @@ public:
|
|||||||
BEAST_FAIL();
|
BEAST_FAIL();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#if !defined(BOOST_ASIO_NO_TS_EXECUTORS)
|
#if !defined(BOOST_ASIO_NO_TS_EXECUTORS)
|
||||||
net::execution_context&
|
net::execution_context&
|
||||||
@@ -198,7 +204,13 @@ public:
|
|||||||
void dispatch(F&& f, Alloc const& a)
|
void dispatch(F&& f, Alloc const& a)
|
||||||
{
|
{
|
||||||
s_.on_invoke();
|
s_.on_invoke();
|
||||||
ex_.dispatch(std::forward<F>(f), a);
|
net::execution::execute(
|
||||||
|
net::prefer(ex_,
|
||||||
|
net::execution::blocking.possibly,
|
||||||
|
net::execution::allocator(a)),
|
||||||
|
std::forward<F>(f));
|
||||||
|
// previously equivalent to
|
||||||
|
// ex_.dispatch(std::forward<F>(f), a);
|
||||||
}
|
}
|
||||||
|
|
||||||
template<class F, class Alloc>
|
template<class F, class Alloc>
|
||||||
@@ -219,6 +231,27 @@ public:
|
|||||||
#endif // !defined(BOOST_ASIO_NO_TS_EXECUTORS)
|
#endif // !defined(BOOST_ASIO_NO_TS_EXECUTORS)
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#if defined(BOOST_ASIO_NO_TS_EXECUTORS)
|
||||||
|
using F = net::execution::invocable_archetype;
|
||||||
|
using T = test_executor;
|
||||||
|
|
||||||
|
BOOST_STATIC_ASSERT(
|
||||||
|
conditional<true, true_type,
|
||||||
|
typename std::result_of<typename std::decay<F>::type&()>::type
|
||||||
|
>::type::value);
|
||||||
|
|
||||||
|
BOOST_STATIC_ASSERT(std::is_constructible<typename std::decay<F>::type, F>::value);
|
||||||
|
BOOST_STATIC_ASSERT(std::is_move_constructible<typename std::decay<F>::type>::value);
|
||||||
|
BOOST_STATIC_ASSERT(boost::asio::execution::can_execute<T, F>::value);
|
||||||
|
BOOST_STATIC_ASSERT(std::is_nothrow_copy_constructible<T>::value);
|
||||||
|
BOOST_STATIC_ASSERT(std::is_nothrow_destructible<T>::value);
|
||||||
|
BOOST_STATIC_ASSERT(boost::asio::traits::equality_comparable<T>::is_valid);
|
||||||
|
BOOST_STATIC_ASSERT(boost::asio::traits::equality_comparable<T>::is_noexcept);
|
||||||
|
BOOST_STATIC_ASSERT(net::execution::is_executor_v<test_executor>);
|
||||||
|
#else
|
||||||
|
BOOST_STATIC_ASSERT(net::is_executor<test_executor>::value);
|
||||||
|
#endif
|
||||||
|
|
||||||
class test_cb
|
class test_cb
|
||||||
{
|
{
|
||||||
bool fail_ = true;
|
bool fail_ = true;
|
||||||
|
Reference in New Issue
Block a user