![]() System : Linux absol.cf 5.4.0-198-generic #218-Ubuntu SMP Fri Sep 27 20:18:53 UTC 2024 x86_64 User : www-data ( 33) PHP Version : 7.4.33 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare, Directory : /usr/include/boost/beast/core/detail/ |
Upload File : |
// // 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_GET_IO_CONTEXT_HPP #define BOOST_BEAST_DETAIL_GET_IO_CONTEXT_HPP #include <boost/beast/core/stream_traits.hpp> #include <boost/asio/executor.hpp> #include <boost/asio/io_context.hpp> #include <boost/asio/strand.hpp> #include <memory> #include <type_traits> namespace boost { namespace beast { namespace detail { //------------------------------------------------------------------------------ inline net::io_context* get_io_context(net::io_context& ioc) { return std::addressof(ioc); } inline net::io_context* get_io_context(net::io_context::executor_type const& ex) { return std::addressof(ex.context()); } inline net::io_context* get_io_context(net::strand< net::io_context::executor_type> const& ex) { return std::addressof( ex.get_inner_executor().context()); } template<class Executor> net::io_context* get_io_context(net::strand<Executor> const& ex) { return get_io_context(ex.get_inner_executor()); } template< class T, class = typename std::enable_if< std::is_same<T, net::executor>::value>::type> net::io_context* get_io_context(T const& ex) { auto p = ex.template target<typename net::io_context::executor_type>(); if(! p) return nullptr; return std::addressof(p->context()); } inline net::io_context* get_io_context(...) { return nullptr; } //------------------------------------------------------------------------------ template<class T> net::io_context* get_io_context_impl(T& t, std::true_type) { return get_io_context( t.get_executor()); } template<class T> net::io_context* get_io_context_impl(T const&, std::false_type) { return nullptr; } // Returns the io_context*, or nullptr, for any object. template<class T> net::io_context* get_io_context(T& t) { return get_io_context_impl(t, has_get_executor<T>{}); } } // detail } // beast } // boost #endif