diff options
author | DongHun Kwak <dh0128.kwak@samsung.com> | 2019-12-05 15:22:41 +0900 |
---|---|---|
committer | DongHun Kwak <dh0128.kwak@samsung.com> | 2019-12-05 15:22:41 +0900 |
commit | 3c1df2168531ad5580076ae08d529054689aeedd (patch) | |
tree | 941aff6f86393eecacddfec252a8508c7e8351c9 /boost/beast/core/detail/remap_post_to_defer.hpp | |
parent | d6a306e745acfee00e81ccaf3324a2a03516db41 (diff) | |
download | boost-3c1df2168531ad5580076ae08d529054689aeedd.tar.gz boost-3c1df2168531ad5580076ae08d529054689aeedd.tar.bz2 boost-3c1df2168531ad5580076ae08d529054689aeedd.zip |
Imported Upstream version 1.70.0upstream/1.70.0
Diffstat (limited to 'boost/beast/core/detail/remap_post_to_defer.hpp')
-rw-r--r-- | boost/beast/core/detail/remap_post_to_defer.hpp | 109 |
1 files changed, 109 insertions, 0 deletions
diff --git a/boost/beast/core/detail/remap_post_to_defer.hpp b/boost/beast/core/detail/remap_post_to_defer.hpp new file mode 100644 index 0000000000..77f7d8ab20 --- /dev/null +++ b/boost/beast/core/detail/remap_post_to_defer.hpp @@ -0,0 +1,109 @@ +// +// 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_DETAIL_REMAP_POST_TO_DEFER_HPP +#define BOOST_BEAST_DETAIL_REMAP_POST_TO_DEFER_HPP + +#include <boost/asio/bind_executor.hpp> +#include <boost/asio/is_executor.hpp> +#include <boost/core/empty_value.hpp> +#include <type_traits> +#include <utility> + +namespace boost { +namespace beast { +namespace detail { + +template<class Executor> +class remap_post_to_defer + : private boost::empty_value<Executor> +{ + BOOST_STATIC_ASSERT( + net::is_executor<Executor>::value); + + Executor const& + ex() const noexcept + { + return this->get(); + } + +public: + remap_post_to_defer( + remap_post_to_defer&&) = default; + + remap_post_to_defer( + remap_post_to_defer const&) = default; + + explicit + remap_post_to_defer( + Executor const& ex) + : boost::empty_value<Executor>( + boost::empty_init_t{}, ex) + { + } + + bool + operator==( + remap_post_to_defer const& other) const noexcept + { + return ex() == other.ex(); + } + + bool + operator!=( + remap_post_to_defer const& other) const noexcept + { + return ex() != other.ex(); + } + + decltype(std::declval<Executor const&>().context()) + context() const noexcept + { + return ex().context(); + } + + void + on_work_started() const noexcept + { + ex().on_work_started(); + } + + void + on_work_finished() const noexcept + { + ex().on_work_finished(); + } + + template<class F, class A> + void + dispatch(F&& f, A const& a) const + { + ex().dispatch(std::forward<F>(f), a); + } + + template<class F, class A> + void + post(F&& f, A const& a) const + { + ex().defer(std::forward<F>(f), a); + } + + template<class F, class A> + void + defer(F&& f, A const& a) const + { + ex().defer(std::forward<F>(f), a); + } +}; + +} // detail +} // beast +} // boost + +#endif |