|
MayaFlux 0.4.0
Digital-First Multimedia Processing Framework
|
Thread-safe singleton registry for backend service discovery. More...
#include <BackendRegistry.hpp>
Collaboration diagram for MayaFlux::Registry::BackendRegistry:Public Types | |
| using | ServiceFactory = std::function< void *()> |
| using | ServiceId = std::type_index |
Public Member Functions | |
| BackendRegistry (BackendRegistry &&)=delete | |
| BackendRegistry (const BackendRegistry &)=delete | |
| void | clear_all_services () |
| Clear all registered services. | |
| template<typename Interface > | |
| Interface * | get_service () |
| Query for a backend service. | |
| size_t | get_service_count () const |
| Get count of currently registered services. | |
| template<typename Interface > | |
| bool | has_service () const |
| Check if a service is available. | |
| BackendRegistry & | operator= (BackendRegistry &&)=delete |
| BackendRegistry & | operator= (const BackendRegistry &)=delete |
| template<typename Interface > | |
| void | register_service (ServiceFactory factory) |
| Register a backend service capability. | |
| template<typename Interface > | |
| void | unregister_service () |
| Unregister a service. | |
Static Public Member Functions | |
| static BackendRegistry & | instance () |
| Get the global registry instance. | |
Private Member Functions | |
| BackendRegistry ()=default | |
| ~BackendRegistry ()=default | |
Private Attributes | |
| std::shared_mutex | m_mutex |
| std::unordered_map< ServiceId, ServiceFactory > | m_services |
Thread-safe singleton registry for backend service discovery.
Provides centralized, type-safe registry for backend capabilities without creating dependencies between processing components and specific backend implementations. Backends register their services on initialization, and processing components (Buffers, Nodes, Coroutines, etc.) query for needed capabilities at runtime.
Design Philosophy:
Thread Safety: All methods are thread-safe. Registration and queries can occur concurrently from different threads. Uses shared_mutex for optimal read performance (multiple concurrent queries, exclusive write for registration).
Lifecycle:
Example Usage:
Backend registration: auto& registry = BackendRegistry::instance(); registry.register_service<IBufferService>([this]() -> void* { return m_buffer_service.get(); });
Consumer query: auto* service = BackendRegistry::instance().get_service<IBufferService>(); if (service) { service->create_buffer(...); }
Definition at line 49 of file BackendRegistry.hpp.