virtual const PluginInfo *lookup_plugin_info (const Handle PluginHandle) { PluginInfo *result (0); PluginStruct *ps (pluginTable.lookup (PluginHandle)); if (ps) { result = ps->info; } return result; }
PluginStruct *release_plugin (Handle PluginHandle) { PluginStruct *ps (pluginTable.lookup (PluginHandle)); if (ps) { update_obs (PluginDiscoverRemove, PluginHandle); } ps = (pluginTable.remove (PluginHandle)); if (ps && ps->info && ps->plugin) { if (started) { LevelStruct *ls (levelsHead); while (ls) { if (ps->info->uses_level (ls->Level)) { ps->plugin->update_plugin_state (PluginStateStop, ls->Level); } ls = ls->next; } ls = levelsHead; while (ls) { if (ps->info->uses_level (ls->Level)) { ps->plugin->update_plugin_state (PluginStateShutdown, ls->Level); } ls = ls->next; } } if (discovered) { remove_all_plugins (ps->plugin); if (ps->HasInterface) { remove_plugin (ps->plugin); interfaceTable.remove (PluginHandle); } } } LevelStruct *ls = levelsHead; while (ls) { ls->table.remove (PluginHandle); ls = ls->next; } return ps; }