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

jvprat at users.sourceforge.net jvprat at users.sourceforge.net
Tue May 13 11:30:23 CEST 2008


Revision: 32082
          http://scummvm.svn.sourceforge.net/scummvm/?rev=32082&view=rev
Author:   jvprat
Date:     2008-05-13 02:30:23 -0700 (Tue, 13 May 2008)

Log Message:
-----------
- Added operator-> to Plugin subclasses so they don't have to reimplement the PluginObject subclass interfaces (thanks to Fingolfin for suggesting it)
- Added the PluginSubclass template to help creating Plugin subclasses

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

Modified: scummvm/trunk/base/commandLine.cpp
===================================================================
--- scummvm/trunk/base/commandLine.cpp	2008-05-13 08:21:28 UTC (rev 32081)
+++ scummvm/trunk/base/commandLine.cpp	2008-05-13 09:30:23 UTC (rev 32082)
@@ -23,7 +23,7 @@
  *
  */
 
-#include "engines/engine.h"
+#include "engines/metaengine.h"
 #include "base/commandLine.h"
 #include "base/plugins.h"
 #include "base/version.h"
@@ -559,10 +559,10 @@
 	printf("Game ID              Full Title                                            \n"
 	       "-------------------- ------------------------------------------------------\n");
 
-	const EnginePluginList &plugins = EngineMan.getPlugins();
-	EnginePluginList::const_iterator iter = plugins.begin();
+	const EnginePlugin::list &plugins = EngineMan.getPlugins();
+	EnginePlugin::list::const_iterator iter = plugins.begin();
 	for (iter = plugins.begin(); iter != plugins.end(); ++iter) {
-		GameList list = (*iter)->getSupportedGames();
+		GameList list = (**iter)->getSupportedGames();
 		for (GameList::iterator v = list.begin(); v != list.end(); ++v) {
 			printf("%-20s %s\n", v->gameid().c_str(), v->description().c_str());
 		}
@@ -622,7 +622,7 @@
 	}
 
 	// Query the plugin for a list of savegames
-	SaveStateList saveList = plugin->listSaves(target);
+	SaveStateList saveList = (*plugin)->listSaves(target);
 
 	// TODO: Include more info about the target (desc, engine name, ...) ???
 	printf("Saves for target '%s':\n", target);

Modified: scummvm/trunk/base/main.cpp
===================================================================
--- scummvm/trunk/base/main.cpp	2008-05-13 08:21:28 UTC (rev 32081)
+++ scummvm/trunk/base/main.cpp	2008-05-13 09:30:23 UTC (rev 32082)
@@ -32,6 +32,7 @@
  */
 
 #include "engines/engine.h"
+#include "engines/metaengine.h"
 #include "base/commandLine.h"
 #include "base/plugins.h"
 #include "base/version.h"
@@ -138,7 +139,7 @@
 
 	// Create the game engine
 	Engine *engine = 0;
-	PluginError err = plugin->createInstance(&system, &engine);
+	PluginError err = (*plugin)->createInstance(&system, &engine);
 	if (!engine || err != kNoError) {
 		// TODO: Show an error dialog or so?
 		// TODO: Also take 'err' into consideration...

Modified: scummvm/trunk/base/plugins.cpp
===================================================================
--- scummvm/trunk/base/plugins.cpp	2008-05-13 08:21:28 UTC (rev 32081)
+++ scummvm/trunk/base/plugins.cpp	2008-05-13 09:30:23 UTC (rev 32082)
@@ -301,43 +301,19 @@
 
 #include "engines/metaengine.h"
 
-const char *EnginePlugin::getCopyright() const {
-	return ((MetaEngine*)_pluginObject)->getCopyright();
-}
-
-PluginError EnginePlugin::createInstance(OSystem *syst, Engine **engine) const {
-	return ((MetaEngine*)_pluginObject)->createInstance(syst, engine);
-}
-
-GameList EnginePlugin::getSupportedGames() const {
-	return ((MetaEngine*)_pluginObject)->getSupportedGames();
-}
-
-GameDescriptor EnginePlugin::findGame(const char *gameid) const {
-	return ((MetaEngine*)_pluginObject)->findGame(gameid);
-}
-
-GameList EnginePlugin::detectGames(const FSList &fslist) const {
-	return ((MetaEngine*)_pluginObject)->detectGames(fslist);
-}
-
-SaveStateList EnginePlugin::listSaves(const char *target) const {
-	return ((MetaEngine*)_pluginObject)->listSaves(target);
-}
-
 DECLARE_SINGLETON(EngineManager);
 
 GameDescriptor EngineManager::findGame(const Common::String &gameName, const EnginePlugin **plugin) const {
 	// Find the GameDescriptor for this target
-	const EnginePluginList &plugins = getPlugins();
+	const EnginePlugin::list &plugins = getPlugins();
 	GameDescriptor result;
 
 	if (plugin)
 		*plugin = 0;
 
-	EnginePluginList::const_iterator iter = plugins.begin();
+	EnginePlugin::list::const_iterator iter = plugins.begin();
 	for (iter = plugins.begin(); iter != plugins.end(); ++iter) {
-		result = (*iter)->findGame(gameName.c_str());
+		result = (**iter)->findGame(gameName.c_str());
 		if (!result.gameid().empty()) {
 			if (plugin)
 				*plugin = *iter;
@@ -350,18 +326,18 @@
 GameList EngineManager::detectGames(const FSList &fslist) const {
 	GameList candidates;
 
-	const EnginePluginList &plugins = getPlugins();
+	const EnginePlugin::list &plugins = getPlugins();
 
 	// Iterate over all known games and for each check if it might be
 	// the game in the presented directory.
-	EnginePluginList::const_iterator iter;
+	EnginePlugin::list::const_iterator iter;
 	for (iter = plugins.begin(); iter != plugins.end(); ++iter) {
-		candidates.push_back((*iter)->detectGames(fslist));
+		candidates.push_back((**iter)->detectGames(fslist));
 	}
 
 	return candidates;
 }
 
-const EnginePluginList &EngineManager::getPlugins() const {
-	return (const EnginePluginList&)PluginManager::instance().getPlugins(PLUGIN_TYPE_ENGINE);
+const EnginePlugin::list &EngineManager::getPlugins() const {
+	return (const EnginePlugin::list&)PluginManager::instance().getPlugins(PLUGIN_TYPE_ENGINE);
 }

Modified: scummvm/trunk/base/plugins.h
===================================================================
--- scummvm/trunk/base/plugins.h	2008-05-13 08:21:28 UTC (rev 32081)
+++ scummvm/trunk/base/plugins.h	2008-05-13 09:30:23 UTC (rev 32082)
@@ -141,6 +141,17 @@
 /** List of plugins. */
 typedef Common::Array<Plugin *> PluginList;
 
+/** Template to help defining Plugin subclasses */
+template<class PO_t>
+class PluginSubclass : public Plugin {
+public:
+	PO_t *operator->() const {
+		return (PO_t *)_pluginObject;
+	}
+
+	typedef Common::Array<PluginSubclass *> list;
+};
+
 class PluginProvider {
 public:
 	virtual ~PluginProvider() {}
@@ -197,22 +208,11 @@
 
 // Engine plugins
 
-class Engine;
 class FSList;
-class OSystem;
+class MetaEngine;
 
-class EnginePlugin : public Plugin {
-public:
-	const char *getCopyright() const;
-	PluginError createInstance(OSystem *syst, Engine **engine) const;
-	GameList getSupportedGames() const;
-	GameDescriptor findGame(const char *gameid) const;
-	GameList detectGames(const FSList &fslist) const;
-	SaveStateList listSaves(const char *target) const;
-};
+typedef PluginSubclass<MetaEngine> EnginePlugin;
 
-typedef Common::Array<EnginePlugin *> EnginePluginList;
-
 class EngineManager : public Common::Singleton<EngineManager> {
 private:
 	friend class Common::Singleton<SingletonBaseType>;
@@ -220,7 +220,7 @@
 public:
 	GameDescriptor findGame(const Common::String &gameName, const EnginePlugin **plugin = NULL) const;
 	GameList detectGames(const FSList &fslist) const;
-	const EnginePluginList &getPlugins() const;
+	const EnginePlugin::list &getPlugins() const;
 };
 
 /** Shortcut for accessing the engine manager. */

Modified: scummvm/trunk/gui/about.cpp
===================================================================
--- scummvm/trunk/gui/about.cpp	2008-05-13 08:21:28 UTC (rev 32081)
+++ scummvm/trunk/gui/about.cpp	2008-05-13 09:30:23 UTC (rev 32082)
@@ -22,7 +22,7 @@
  * $Id$
  */
 
-#include "engines/engine.h"
+#include "engines/metaengine.h"
 #include "base/plugins.h"
 #include "base/version.h"
 #include "common/events.h"
@@ -128,8 +128,8 @@
 	_lines.push_back("");
 
 	addLine("\\C\\c1""Available engines:");
-	const EnginePluginList &plugins = EngineMan.getPlugins();
-	EnginePluginList::const_iterator iter = plugins.begin();
+	const EnginePlugin::list &plugins = EngineMan.getPlugins();
+	EnginePlugin::list::const_iterator iter = plugins.begin();
 	for (; iter != plugins.end(); ++iter) {
 	  Common::String str;
 	  str = "\\C";
@@ -137,7 +137,7 @@
 	  addLine(str.c_str());
 
 	  str = "\\C\\c2";
-	  str += (**iter).getCopyright();
+	  str += (**iter)->getCopyright();
 	  addLine(str.c_str());
 
 	  //addLine("");


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