Deki 1.3.0
Modular C++ 2D engine for embedded displays and desktop
Loading...
Searching...
No Matches
DekiProviderRegistryBase Class Reference

Per-category provider registry that lives in deki-engine-core.dll. More...

#include <DekiProviderRegistryBase.h>

Public Member Functions

void Register (IDekiPackage *provider, const char *providerId, bool isPlugin)
void Unregister (IDekiPackage *provider)
IDekiPackageGetById (const char *providerId) const
IDekiPackageGetDefault () const
int GetCount () const
IDekiPackageGetAt (int idx) const
void ClearPluginProviders ()
 Called by PackageLoader before FreeLibrary on each plugin DLL.
 DekiProviderRegistryBase ()=default
 DekiProviderRegistryBase (const DekiProviderRegistryBase &)=delete
DekiProviderRegistryBaseoperator= (const DekiProviderRegistryBase &)=delete

Static Public Member Functions

static DekiProviderRegistryBaseForCategory (const char *category)
static void ClearAllPluginProviders ()
 Static convenience: clear plugin-owned providers across every known category.

Detailed Description

Per-category provider registry that lives in deki-engine-core.dll.

One instance per category string (e.g. "location", "weather"). Package DLLs register their concrete providers here at DekiPlugin_RegisterComponents time.

The base stores IDekiPackage* pointers and is interface-agnostic on purpose: the typed wrapper (DekiProviderRegistry<Interface>) downcasts via static_cast. Safe because each (category, providerId) pair is owned by exactly one type.

Same DLL-boundary pattern as DekiSettingsRegistry — singleton symbol is exported from deki-engine-core.dll so every package DLL sees the same instance via dllimport. Plugin-aware ClearPlugin path lets PackageLoader drop providers before FreeLibrary without dangling vtables.

Constructor & Destructor Documentation

◆ DekiProviderRegistryBase() [1/2]

DekiProviderRegistryBase::DekiProviderRegistryBase ( )
default

◆ DekiProviderRegistryBase() [2/2]

DekiProviderRegistryBase::DekiProviderRegistryBase ( const DekiProviderRegistryBase & )
delete

Member Function Documentation

◆ ForCategory()

DekiProviderRegistryBase & DekiProviderRegistryBase::ForCategory ( const char * category)
static

◆ Register()

void DekiProviderRegistryBase::Register ( IDekiPackage * provider,
const char * providerId,
bool isPlugin )

◆ Unregister()

void DekiProviderRegistryBase::Unregister ( IDekiPackage * provider)

◆ GetById()

IDekiPackage * DekiProviderRegistryBase::GetById ( const char * providerId) const

◆ GetDefault()

IDekiPackage * DekiProviderRegistryBase::GetDefault ( ) const

◆ GetCount()

int DekiProviderRegistryBase::GetCount ( ) const

◆ GetAt()

IDekiPackage * DekiProviderRegistryBase::GetAt ( int idx) const

◆ ClearPluginProviders()

void DekiProviderRegistryBase::ClearPluginProviders ( )

Called by PackageLoader before FreeLibrary on each plugin DLL.

Removes every provider registered with isPlugin=true and frees the owned memory. Engine-core-owned providers (isPlugin=false) are preserved.

◆ ClearAllPluginProviders()

void DekiProviderRegistryBase::ClearAllPluginProviders ( )
static

Static convenience: clear plugin-owned providers across every known category.

Used by PackageLoader::UnloadAllPackages as belt-and-braces in case a plugin's DekiPlugin_Shutdown didn't clean up after itself.

◆ operator=()

DekiProviderRegistryBase & DekiProviderRegistryBase::operator= ( const DekiProviderRegistryBase & )
delete

The documentation for this class was generated from the following file: