forked from boostorg/beast
Remove detail::bind_default_executor helper
This commit is contained in:
committed by
Mohammad Nejati
parent
3996cae768
commit
667e9ea251
@@ -1,106 +0,0 @@
|
||||
//
|
||||
// Copyright (c) 2016-2019 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)
|
||||
//
|
||||
// Official repository: https://github.com/boostorg/beast
|
||||
//
|
||||
|
||||
#ifndef BOOST_BEAST_CORE_DETAIL_BIND_DEFAULT_EXECUTOR_HPP
|
||||
#define BOOST_BEAST_CORE_DETAIL_BIND_DEFAULT_EXECUTOR_HPP
|
||||
|
||||
#include <boost/asio/associated_allocator.hpp>
|
||||
#include <boost/asio/associated_executor.hpp>
|
||||
#include <boost/asio/dispatch.hpp>
|
||||
#include <boost/asio/executor.hpp>
|
||||
#include <boost/asio/handler_alloc_hook.hpp>
|
||||
#include <boost/asio/handler_continuation_hook.hpp>
|
||||
#include <boost/asio/handler_invoke_hook.hpp>
|
||||
#include <boost/core/empty_value.hpp>
|
||||
#include <utility>
|
||||
|
||||
namespace boost {
|
||||
namespace beast {
|
||||
namespace detail {
|
||||
|
||||
template<class Handler, class Executor>
|
||||
class bind_default_executor_wrapper
|
||||
: private boost::empty_value<Executor>
|
||||
{
|
||||
Handler h_;
|
||||
|
||||
public:
|
||||
template<class Handler_>
|
||||
bind_default_executor_wrapper(
|
||||
Handler_&& h,
|
||||
Executor const& ex)
|
||||
: boost::empty_value<Executor>(
|
||||
boost::empty_init_t{}, ex)
|
||||
, h_(std::forward<Handler_>(h))
|
||||
{
|
||||
}
|
||||
|
||||
template<class... Args>
|
||||
void
|
||||
operator()(Args&&... args)
|
||||
{
|
||||
h_(std::forward<Args>(args)...);
|
||||
}
|
||||
|
||||
using allocator_type =
|
||||
net::associated_allocator_t<Handler>;
|
||||
|
||||
allocator_type
|
||||
get_allocator() const noexcept
|
||||
{
|
||||
return net::get_associated_allocator(h_);
|
||||
}
|
||||
|
||||
using executor_type =
|
||||
net::associated_executor_t<Handler, Executor>;
|
||||
|
||||
executor_type
|
||||
get_executor() const noexcept
|
||||
{
|
||||
return net::get_associated_executor(
|
||||
h_, this->get());
|
||||
}
|
||||
|
||||
using cancellation_slot_type =
|
||||
net::associated_cancellation_slot_t<Handler>;
|
||||
|
||||
cancellation_slot_type
|
||||
get_cancellation_slot() const noexcept
|
||||
{
|
||||
return net::get_associated_cancellation_slot(h_,
|
||||
net::cancellation_slot());
|
||||
}
|
||||
|
||||
friend
|
||||
bool asio_handler_is_continuation(
|
||||
bind_default_executor_wrapper* p)
|
||||
{
|
||||
using boost::asio::asio_handler_is_continuation;
|
||||
return asio_handler_is_continuation(
|
||||
std::addressof(p->h_));
|
||||
}
|
||||
};
|
||||
|
||||
template<class Executor, class Handler>
|
||||
auto
|
||||
bind_default_executor(Executor const& ex, Handler&& h) ->
|
||||
bind_default_executor_wrapper<
|
||||
typename std::decay<Handler>::type,
|
||||
Executor>
|
||||
{
|
||||
return bind_default_executor_wrapper<
|
||||
typename std::decay<Handler>::type,
|
||||
Executor>(std::forward<Handler>(h), ex);
|
||||
}
|
||||
|
||||
} // detail
|
||||
} // beast
|
||||
} // boost
|
||||
|
||||
#endif
|
Reference in New Issue
Block a user