From 9ba353b9d8f6c4336ca4b6001fe5f22b85a8fb81 Mon Sep 17 00:00:00 2001 From: Jordi Vilalta Prat Date: Mon, 12 May 2008 01:26:43 +0000 Subject: Keep separated arrays for each type of plugin svn-id: r32046 --- base/main.cpp | 4 ++-- base/plugins.cpp | 15 ++++++++------- base/plugins.h | 6 +++--- 3 files changed, 13 insertions(+), 12 deletions(-) diff --git a/base/main.cpp b/base/main.cpp index 80f77f89ab..8b697e120d 100644 --- a/base/main.cpp +++ b/base/main.cpp @@ -302,7 +302,7 @@ extern "C" int scummvm_main(int argc, char *argv[]) { if (plugin) { // Unload all plugins not needed for this game, // to save memory - PluginManager::instance().unloadPluginsExcept(plugin); + PluginManager::instance().unloadPluginsExcept(PLUGIN_TYPE_ENGINE, plugin); // Try to run the game int result = runGame(plugin, system, specialDebug); @@ -329,7 +329,7 @@ extern "C" int scummvm_main(int argc, char *argv[]) { launcherDialog(system); } - PluginManager::instance().unloadPluginsExcept(NULL); + PluginManager::instance().unloadPlugins(); PluginManager::destroy(); Common::ConfigManager::destroy(); GUI::NewGui::destroy(); diff --git a/base/plugins.cpp b/base/plugins.cpp index 5eca8f394d..d2bd9b398a 100644 --- a/base/plugins.cpp +++ b/base/plugins.cpp @@ -253,12 +253,13 @@ void PluginManager::loadPlugins() { } void PluginManager::unloadPlugins() { - unloadPluginsExcept(NULL); + for (int i = 0; i < PLUGIN_TYPE_MAX; i++) + unloadPluginsExcept((PluginType)i, NULL); } -void PluginManager::unloadPluginsExcept(const Plugin *plugin) { +void PluginManager::unloadPluginsExcept(PluginType type, const Plugin *plugin) { Plugin *found = NULL; - for (PluginList::iterator p = _plugins.begin(); p != _plugins.end(); ++p) { + for (PluginList::iterator p = _plugins[type].begin(); p != _plugins[type].end(); ++p) { if (*p == plugin) { found = *p; } else { @@ -266,9 +267,9 @@ void PluginManager::unloadPluginsExcept(const Plugin *plugin) { delete *p; } } - _plugins.clear(); + _plugins[type].clear(); if (found != NULL) { - _plugins.push_back(found); + _plugins[type].push_back(found); } } @@ -277,7 +278,7 @@ bool PluginManager::tryLoadPlugin(Plugin *plugin) { // Try to load the plugin if (plugin->loadPlugin()) { // If successful, add it to the list of known plugins and return. - _plugins.push_back(plugin); + _plugins[plugin->getType()].push_back(plugin); // TODO/FIXME: We should perform some additional checks here: // * Check for some kind of "API version" (possibly derived from the @@ -362,5 +363,5 @@ GameList EngineManager::detectGames(const FSList &fslist) const { } const EnginePluginList &EngineManager::getPlugins() const { - return (const EnginePluginList&)PluginManager::instance().getPlugins(); + return (const EnginePluginList&)PluginManager::instance().getPlugins(PLUGIN_TYPE_ENGINE); } diff --git a/base/plugins.h b/base/plugins.h index 14ce2a3aa4..3f2d19fd50 100644 --- a/base/plugins.h +++ b/base/plugins.h @@ -174,7 +174,7 @@ protected: class PluginManager : public Common::Singleton { typedef Common::List ProviderList; private: - PluginList _plugins; + PluginList _plugins[PLUGIN_TYPE_MAX]; ProviderList _providers; bool tryLoadPlugin(Plugin *plugin); @@ -189,9 +189,9 @@ public: void loadPlugins(); void unloadPlugins(); - void unloadPluginsExcept(const Plugin *plugin); + void unloadPluginsExcept(PluginType type, const Plugin *plugin); - const PluginList &getPlugins() { return _plugins; } + const PluginList &getPlugins(PluginType t) { return _plugins[t]; } }; -- cgit v1.2.3