aboutsummaryrefslogtreecommitdiff
path: root/base
diff options
context:
space:
mode:
authorJordi Vilalta Prat2008-05-12 01:26:43 +0000
committerJordi Vilalta Prat2008-05-12 01:26:43 +0000
commit9ba353b9d8f6c4336ca4b6001fe5f22b85a8fb81 (patch)
tree86cfebe2742bc234d0349c482edc03e3bb93bbf7 /base
parent2c9968fe80c4ba78f895c9bac757dd6b1604ccce (diff)
downloadscummvm-rg350-9ba353b9d8f6c4336ca4b6001fe5f22b85a8fb81.tar.gz
scummvm-rg350-9ba353b9d8f6c4336ca4b6001fe5f22b85a8fb81.tar.bz2
scummvm-rg350-9ba353b9d8f6c4336ca4b6001fe5f22b85a8fb81.zip
Keep separated arrays for each type of plugin
svn-id: r32046
Diffstat (limited to 'base')
-rw-r--r--base/main.cpp4
-rw-r--r--base/plugins.cpp15
-rw-r--r--base/plugins.h6
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<PluginManager> {
typedef Common::List<PluginProvider *> 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]; }
};