84 template <
typename Interface>
87 std::unique_lock lock(m_mutex);
88 m_services[
typeid(Interface)] = std::move(factory);
110 template <
typename Interface>
113 std::shared_lock lock(m_mutex);
114 auto it = m_services.find(
typeid(Interface));
115 if (it != m_services.end()) {
116 return static_cast<Interface*
>(it->second());
135 template <
typename Interface>
138 std::shared_lock lock(m_mutex);
139 return m_services.contains(
typeid(Interface));
153 template <
typename Interface>
156 std::unique_lock lock(m_mutex);
157 m_services.erase(
typeid(Interface));
168 std::unique_lock lock(m_mutex);
180 std::shared_lock lock(m_mutex);
181 return m_services.size();
Interface * get_service()
Query for a backend service.
~BackendRegistry()=default
void register_service(ServiceFactory factory)
Register a backend service capability.
BackendRegistry(const BackendRegistry &)=delete
BackendRegistry()=default
BackendRegistry & operator=(const BackendRegistry &)=delete
std::function< void *()> ServiceFactory
std::unordered_map< ServiceId, ServiceFactory > m_services
BackendRegistry(BackendRegistry &&)=delete
size_t get_service_count() const
Get count of currently registered services.
BackendRegistry & operator=(BackendRegistry &&)=delete
bool has_service() const
Check if a service is available.
std::shared_mutex m_mutex
std::type_index ServiceId
void clear_all_services()
Clear all registered services.
void unregister_service()
Unregister a service.
Thread-safe singleton registry for backend service discovery.