diff options
author | DongHun Kwak <dh0128.kwak@samsung.com> | 2019-12-05 15:11:01 +0900 |
---|---|---|
committer | DongHun Kwak <dh0128.kwak@samsung.com> | 2019-12-05 15:11:01 +0900 |
commit | 3fdc3e5ee96dca5b11d1694975a65200787eab86 (patch) | |
tree | 5c1733853892b8397d67706fa453a9bd978d2102 /boost/asio/detail/impl/service_registry.hpp | |
parent | 88e602c57797660ebe0f9e15dbd64c1ff16dead3 (diff) | |
download | boost-3fdc3e5ee96dca5b11d1694975a65200787eab86.tar.gz boost-3fdc3e5ee96dca5b11d1694975a65200787eab86.tar.bz2 boost-3fdc3e5ee96dca5b11d1694975a65200787eab86.zip |
Imported Upstream version 1.66.0upstream/1.66.0
Diffstat (limited to 'boost/asio/detail/impl/service_registry.hpp')
-rw-r--r-- | boost/asio/detail/impl/service_registry.hpp | 64 |
1 files changed, 35 insertions, 29 deletions
diff --git a/boost/asio/detail/impl/service_registry.hpp b/boost/asio/detail/impl/service_registry.hpp index 7ffdd029f7..11ad4cf5cc 100644 --- a/boost/asio/detail/impl/service_registry.hpp +++ b/boost/asio/detail/impl/service_registry.hpp @@ -21,64 +21,70 @@ namespace boost { namespace asio { namespace detail { -template <typename Service, typename Arg> -service_registry::service_registry( - boost::asio::io_service& o, Service*, Arg arg) - : owner_(o), - first_service_(new Service(o, arg)) -{ - boost::asio::io_service::service::key key; - init_key(key, Service::id); - first_service_->key_ = key; - first_service_->next_ = 0; -} - template <typename Service> -Service& service_registry::first_service() +Service& service_registry::use_service() { - return *static_cast<Service*>(first_service_); + execution_context::service::key key; + init_key<Service>(key, 0); + factory_type factory = &service_registry::create<Service, execution_context>; + return *static_cast<Service*>(do_use_service(key, factory, &owner_)); } template <typename Service> -Service& service_registry::use_service() +Service& service_registry::use_service(io_context& owner) { - boost::asio::io_service::service::key key; - init_key(key, Service::id); - factory_type factory = &service_registry::create<Service>; - return *static_cast<Service*>(do_use_service(key, factory)); + execution_context::service::key key; + init_key<Service>(key, 0); + factory_type factory = &service_registry::create<Service, io_context>; + return *static_cast<Service*>(do_use_service(key, factory, &owner)); } template <typename Service> void service_registry::add_service(Service* new_service) { - boost::asio::io_service::service::key key; - init_key(key, Service::id); + execution_context::service::key key; + init_key<Service>(key, 0); return do_add_service(key, new_service); } template <typename Service> bool service_registry::has_service() const { - boost::asio::io_service::service::key key; - init_key(key, Service::id); + execution_context::service::key key; + init_key<Service>(key, 0); return do_has_service(key); } +template <typename Service> +inline void service_registry::init_key( + execution_context::service::key& key, ...) +{ + init_key_from_id(key, Service::id); +} + #if !defined(BOOST_ASIO_NO_TYPEID) template <typename Service> -void service_registry::init_key(boost::asio::io_service::service::key& key, - const boost::asio::detail::service_id<Service>& /*id*/) +void service_registry::init_key(execution_context::service::key& key, + typename enable_if< + is_base_of<typename Service::key_type, Service>::value>::type*) { key.type_info_ = &typeid(typeid_wrapper<Service>); key.id_ = 0; } -#endif // !defined(BOOST_ASIO_NO_TYPEID) template <typename Service> -boost::asio::io_service::service* service_registry::create( - boost::asio::io_service& owner) +void service_registry::init_key_from_id(execution_context::service::key& key, + const service_id<Service>& /*id*/) +{ + key.type_info_ = &typeid(typeid_wrapper<Service>); + key.id_ = 0; +} +#endif // !defined(BOOST_ASIO_NO_TYPEID) + +template <typename Service, typename Owner> +execution_context::service* service_registry::create(void* owner) { - return new Service(owner); + return new Service(*static_cast<Owner*>(owner)); } } // namespace detail |