[Scummvm-cvs-logs] SF.net SVN: scummvm: [32046] scummvm/trunk/base

jvprat at users.sourceforge.net jvprat at users.sourceforge.net
Mon May 12 03:26:44 CEST 2008


Revision: 32046
          http://scummvm.svn.sourceforge.net/scummvm/?rev=32046&view=rev
Author:   jvprat
Date:     2008-05-11 18:26:43 -0700 (Sun, 11 May 2008)

Log Message:
-----------
Keep separated arrays for each type of plugin

Modified Paths:
--------------
    scummvm/trunk/base/main.cpp
    scummvm/trunk/base/plugins.cpp
    scummvm/trunk/base/plugins.h

Modified: scummvm/trunk/base/main.cpp
===================================================================
--- scummvm/trunk/base/main.cpp	2008-05-12 00:26:29 UTC (rev 32045)
+++ scummvm/trunk/base/main.cpp	2008-05-12 01:26:43 UTC (rev 32046)
@@ -302,7 +302,7 @@
 		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 @@
 
 		launcherDialog(system);
 	}
-	PluginManager::instance().unloadPluginsExcept(NULL);
+	PluginManager::instance().unloadPlugins();
 	PluginManager::destroy();
 	Common::ConfigManager::destroy();
 	GUI::NewGui::destroy();

Modified: scummvm/trunk/base/plugins.cpp
===================================================================
--- scummvm/trunk/base/plugins.cpp	2008-05-12 00:26:29 UTC (rev 32045)
+++ scummvm/trunk/base/plugins.cpp	2008-05-12 01:26:43 UTC (rev 32046)
@@ -253,12 +253,13 @@
 }
 
 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 @@
 			delete *p;
 		}
 	}
-	_plugins.clear();
+	_plugins[type].clear();
 	if (found != NULL) {
-		_plugins.push_back(found);
+		_plugins[type].push_back(found);
 	}
 }
 
@@ -277,7 +278,7 @@
 	// 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 @@
 }
 
 const EnginePluginList &EngineManager::getPlugins() const {
-	return (const EnginePluginList&)PluginManager::instance().getPlugins();
+	return (const EnginePluginList&)PluginManager::instance().getPlugins(PLUGIN_TYPE_ENGINE);
 }

Modified: scummvm/trunk/base/plugins.h
===================================================================
--- scummvm/trunk/base/plugins.h	2008-05-12 00:26:29 UTC (rev 32045)
+++ scummvm/trunk/base/plugins.h	2008-05-12 01:26:43 UTC (rev 32046)
@@ -174,7 +174,7 @@
 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 @@
 
 	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]; }
 };
 
 


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.




More information about the Scummvm-git-logs mailing list