From 98f58eec1fa99d77ecd1d6a8821c9d49fd9d358a Mon Sep 17 00:00:00 2001 From: Christopher Kohlhoff Date: Sun, 17 Oct 2021 11:08:58 +1100 Subject: [PATCH] Enable separate compilation for any_io_executor. --- include/boost/asio/any_io_executor.hpp | 77 ++++++------ include/boost/asio/impl/any_io_executor.ipp | 126 ++++++++++++++++++++ include/boost/asio/impl/src.hpp | 1 + 3 files changed, 166 insertions(+), 38 deletions(-) create mode 100644 include/boost/asio/impl/any_io_executor.ipp diff --git a/include/boost/asio/any_io_executor.hpp b/include/boost/asio/any_io_executor.hpp index 8eb3d724..dffd9e5b 100644 --- a/include/boost/asio/any_io_executor.hpp +++ b/include/boost/asio/any_io_executor.hpp @@ -88,29 +88,17 @@ public: #endif // !defined(GENERATING_DOCUMENTATION) /// Default constructor. - any_io_executor() BOOST_ASIO_NOEXCEPT - : base_type() - { - } + BOOST_ASIO_DECL any_io_executor() BOOST_ASIO_NOEXCEPT; /// Construct in an empty state. Equivalent effects to default constructor. - any_io_executor(nullptr_t) BOOST_ASIO_NOEXCEPT - : base_type(nullptr_t()) - { - } + BOOST_ASIO_DECL any_io_executor(nullptr_t) BOOST_ASIO_NOEXCEPT; /// Copy constructor. - any_io_executor(const any_io_executor& e) BOOST_ASIO_NOEXCEPT - : base_type(static_cast(e)) - { - } + BOOST_ASIO_DECL any_io_executor(const any_io_executor& e) BOOST_ASIO_NOEXCEPT; #if defined(BOOST_ASIO_HAS_MOVE) || defined(GENERATING_DOCUMENTATION) /// Move constructor. - any_io_executor(any_io_executor&& e) BOOST_ASIO_NOEXCEPT - : base_type(static_cast(e)) - { - } + BOOST_ASIO_DECL any_io_executor(any_io_executor&& e) BOOST_ASIO_NOEXCEPT; #endif // defined(BOOST_ASIO_HAS_MOVE) || defined(GENERATING_DOCUMENTATION) /// Construct to point to the same target as another any_executor. @@ -159,38 +147,23 @@ public: #endif // defined(GENERATING_DOCUMENTATION) /// Assignment operator. - any_io_executor& operator=(const any_io_executor& e) BOOST_ASIO_NOEXCEPT - { - base_type::operator=(static_cast(e)); - return *this; - } + BOOST_ASIO_DECL any_io_executor& operator=( + const any_io_executor& e) BOOST_ASIO_NOEXCEPT; #if defined(BOOST_ASIO_HAS_MOVE) || defined(GENERATING_DOCUMENTATION) /// Move assignment operator. - any_io_executor& operator=(any_io_executor&& e) BOOST_ASIO_NOEXCEPT - { - base_type::operator=(static_cast(e)); - return *this; - } + BOOST_ASIO_DECL any_io_executor& operator=( + any_io_executor&& e) BOOST_ASIO_NOEXCEPT; #endif // defined(BOOST_ASIO_HAS_MOVE) || defined(GENERATING_DOCUMENTATION) /// Assignment operator that sets the polymorphic wrapper to the empty state. - any_io_executor& operator=(nullptr_t) - { - base_type::operator=(nullptr_t()); - return *this; - } + BOOST_ASIO_DECL any_io_executor& operator=(nullptr_t); /// Destructor. - ~any_io_executor() - { - } + BOOST_ASIO_DECL ~any_io_executor(); /// Swap targets with another polymorphic wrapper. - void swap(any_io_executor& other) BOOST_ASIO_NOEXCEPT - { - static_cast(*this).swap(static_cast(other)); - } + BOOST_ASIO_DECL void swap(any_io_executor& other) BOOST_ASIO_NOEXCEPT; /// Obtain a polymorphic wrapper with the specified property. /** @@ -231,6 +204,30 @@ public: #if !defined(GENERATING_DOCUMENTATION) +template <> +BOOST_ASIO_DECL any_io_executor any_io_executor::require( + const execution::blocking_t::never_t&, int) const; + +template <> +BOOST_ASIO_DECL any_io_executor any_io_executor::prefer( + const execution::blocking_t::possibly_t&, int) const; + +template <> +BOOST_ASIO_DECL any_io_executor any_io_executor::prefer( + const execution::outstanding_work_t::tracked_t&, int) const; + +template <> +BOOST_ASIO_DECL any_io_executor any_io_executor::prefer( + const execution::outstanding_work_t::untracked_t&, int) const; + +template <> +BOOST_ASIO_DECL any_io_executor any_io_executor::prefer( + const execution::relationship_t::fork_t&, int) const; + +template <> +BOOST_ASIO_DECL any_io_executor any_io_executor::prefer( + const execution::relationship_t::continuation_t&, int) const; + namespace traits { #if !defined(BOOST_ASIO_HAS_DEDUCED_EQUALITY_COMPARABLE_TRAIT) @@ -299,4 +296,8 @@ struct prefer_member : #include +#if defined(BOOST_ASIO_HEADER_ONLY) +# include +#endif // defined(BOOST_ASIO_HEADER_ONLY) + #endif // BOOST_ASIO_ANY_IO_EXECUTOR_HPP diff --git a/include/boost/asio/impl/any_io_executor.ipp b/include/boost/asio/impl/any_io_executor.ipp new file mode 100644 index 00000000..3578301c --- /dev/null +++ b/include/boost/asio/impl/any_io_executor.ipp @@ -0,0 +1,126 @@ +// +// impl/any_io_executor.ipp +// ~~~~~~~~~~~~~~~~~~~~~~~~ +// +// Copyright (c) 2003-2021 Christopher M. Kohlhoff (chris at kohlhoff 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 BOOST_ASIO_IMPL_ANY_IO_EXECUTOR_IPP +#define BOOST_ASIO_IMPL_ANY_IO_EXECUTOR_IPP + +#if defined(_MSC_VER) && (_MSC_VER >= 1200) +# pragma once +#endif // defined(_MSC_VER) && (_MSC_VER >= 1200) + +#include +#include + +#include + +namespace boost { +namespace asio { + +any_io_executor::any_io_executor() BOOST_ASIO_NOEXCEPT + : base_type() +{ +} + +any_io_executor::any_io_executor(nullptr_t) BOOST_ASIO_NOEXCEPT + : base_type(nullptr_t()) +{ +} + +any_io_executor::any_io_executor(const any_io_executor& e) BOOST_ASIO_NOEXCEPT + : base_type(static_cast(e)) +{ +} + +#if defined(BOOST_ASIO_HAS_MOVE) +any_io_executor::any_io_executor(any_io_executor&& e) BOOST_ASIO_NOEXCEPT + : base_type(static_cast(e)) +{ +} +#endif // defined(BOOST_ASIO_HAS_MOVE) + +any_io_executor& any_io_executor::operator=( + const any_io_executor& e) BOOST_ASIO_NOEXCEPT +{ + base_type::operator=(static_cast(e)); + return *this; +} + +#if defined(BOOST_ASIO_HAS_MOVE) +any_io_executor& any_io_executor::operator=( + any_io_executor&& e) BOOST_ASIO_NOEXCEPT +{ + base_type::operator=(static_cast(e)); + return *this; +} +#endif // defined(BOOST_ASIO_HAS_MOVE) + +any_io_executor& any_io_executor::operator=(nullptr_t) +{ + base_type::operator=(nullptr_t()); + return *this; +} + +any_io_executor::~any_io_executor() +{ +} + +void any_io_executor::swap(any_io_executor& other) BOOST_ASIO_NOEXCEPT +{ + static_cast(*this).swap(static_cast(other)); +} + +template <> +any_io_executor any_io_executor::require( + const execution::blocking_t::never_t& p, int) const +{ + return static_cast(*this).require(p); +} + +template <> +any_io_executor any_io_executor::prefer( + const execution::blocking_t::possibly_t& p, int) const +{ + return static_cast(*this).prefer(p); +} + +template <> +any_io_executor any_io_executor::prefer( + const execution::outstanding_work_t::tracked_t& p, int) const +{ + return static_cast(*this).prefer(p); +} + +template <> +any_io_executor any_io_executor::prefer( + const execution::outstanding_work_t::untracked_t& p, int) const +{ + return static_cast(*this).prefer(p); +} + +template <> +any_io_executor any_io_executor::prefer( + const execution::relationship_t::fork_t& p, int) const +{ + return static_cast(*this).prefer(p); +} + +template <> +any_io_executor any_io_executor::prefer( + const execution::relationship_t::continuation_t& p, int) const +{ + return static_cast(*this).prefer(p); +} + +} // namespace asio +} // namespace boost + +#include + +#endif // BOOST_ASIO_IMPL_ANY_IO_EXECUTOR_IPP diff --git a/include/boost/asio/impl/src.hpp b/include/boost/asio/impl/src.hpp index c7e8e386..76cbc1c6 100644 --- a/include/boost/asio/impl/src.hpp +++ b/include/boost/asio/impl/src.hpp @@ -19,6 +19,7 @@ # error Do not compile Asio library source with BOOST_ASIO_HEADER_ONLY defined #endif +#include #include #include #include