88 template <
typename Interface>
91 std::unique_lock lock(m_mutex);
92 m_services[
typeid(Interface)] = std::move(factory);
114 template <
typename Interface>
117 std::shared_lock lock(m_mutex);
118 auto it = m_services.find(
typeid(Interface));
119 if (it != m_services.end()) {
120 return static_cast<Interface*
>(it->second());
139 template <
typename Interface>
142 std::shared_lock lock(m_mutex);
143 return m_services.contains(
typeid(Interface));
157 template <
typename Interface>
160 std::unique_lock lock(m_mutex);
161 m_services.erase(
typeid(Interface));
172 std::unique_lock lock(m_mutex);
184 std::shared_lock lock(m_mutex);
185 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.
static BackendRegistry & instance()
Get the global registry instance.
void unregister_service()
Unregister a service.
Thread-safe singleton registry for backend service discovery.