aboutsummaryrefslogtreecommitdiff
path: root/base/plugins.h
diff options
context:
space:
mode:
authorMax Horn2008-02-03 18:56:47 +0000
committerMax Horn2008-02-03 18:56:47 +0000
commit8a73356a2d6e2d6b7ecefb53e0d5e82484f0e697 (patch)
tree7a5fbed1f61904961fad43411f65d8e174955f2c /base/plugins.h
parent15975bdf7324a8b892562768fe73b6e17816d56f (diff)
downloadscummvm-rg350-8a73356a2d6e2d6b7ecefb53e0d5e82484f0e697.tar.gz
scummvm-rg350-8a73356a2d6e2d6b7ecefb53e0d5e82484f0e697.tar.bz2
scummvm-rg350-8a73356a2d6e2d6b7ecefb53e0d5e82484f0e697.zip
Revised Engine plugin API to only provide a single func which returns a MetaEngine instance. Used this to simplify the rest of the plugin system
svn-id: r30780
Diffstat (limited to 'base/plugins.h')
-rw-r--r--base/plugins.h69
1 files changed, 8 insertions, 61 deletions
diff --git a/base/plugins.h b/base/plugins.h
index b37c4eba29..966d65d959 100644
--- a/base/plugins.h
+++ b/base/plugins.h
@@ -35,6 +35,7 @@
class Engine;
class FSList;
+class MetaEngine;
class OSystem;
/**
@@ -67,75 +68,25 @@ public:
* makes it possible to compile the very same code in a module
* both as a static and a dynamic plugin.
*
- * Each plugin has to define the following functions:
- * - GameList Engine_##ID##_gameIDList()
- * -> returns a list of gameid/desc pairs. Only used to implement '--list-games'.
- * - GameDescriptor Engine_##ID##_findGameID(const char *gameid)
- * -> asks the Engine for a GameDescriptor matching the gameid. If that is not
- * possible, the engine MUST set the gameid of the returned value to 0.
- * Note: This MUST succeed for every gameID on the list returned by
- * gameIDList(), but MAY also work for additional gameids (e.g. to support
- * obsolete targets).
- * - GameList Engine_##ID##_detectGames(const FSList &fslist)
- * -> scans through the given file list (usually the contents of a directory),
- * and attempts to detects games present in that location.
- * - PluginError Engine_##ID##_create(OSystem *syst, Engine **engine)
- * -> factory function, create an instance of the Engine class.
- *
* @todo add some means to query the plugin API version etc.
*/
#ifndef DYNAMIC_MODULES
-#define REGISTER_PLUGIN(ID,name,copyright) \
- PluginRegistrator *g_##ID##_PluginReg; \
- void g_##ID##_PluginReg_alloc() { \
- g_##ID##_PluginReg = new PluginRegistrator(name, copyright, \
- Engine_##ID##_gameIDList(), \
- Engine_##ID##_findGameID, \
- Engine_##ID##_create, \
- Engine_##ID##_detectGames \
- );\
+#define REGISTER_PLUGIN(ID,METAENGINE) \
+ MetaEngine *g_##ID##_MetaEngine_alloc() { \
+ return new METAENGINE(); \
} \
void dummyFuncToAllowTrailingSemicolon()
#else
-#define REGISTER_PLUGIN(ID,name,copyright) \
+#define REGISTER_PLUGIN(ID,METAENGINE) \
extern "C" { \
- PLUGIN_EXPORT const char *PLUGIN_name() { return name; } \
- PLUGIN_EXPORT const char *PLUGIN_copyright() { return copyright; } \
- PLUGIN_EXPORT GameList PLUGIN_gameIDList() { return Engine_##ID##_gameIDList(); } \
- PLUGIN_EXPORT GameDescriptor PLUGIN_findGameID(const char *gameid) { return Engine_##ID##_findGameID(gameid); } \
- PLUGIN_EXPORT PluginError PLUGIN_createEngine(OSystem *syst, Engine **engine) { return Engine_##ID##_create(syst, engine); } \
- PLUGIN_EXPORT GameList PLUGIN_detectGames(const FSList &fslist) { return Engine_##ID##_detectGames(fslist); } \
+ PLUGIN_EXPORT MetaEngine *PLUGIN_MetaEngine_alloc() { \
+ return new METAENGINE(); \
+ } \
} \
void dummyFuncToAllowTrailingSemicolon()
#endif
-#ifndef DYNAMIC_MODULES
-/**
- * The PluginRegistrator class is used by the static version of REGISTER_PLUGIN
- * to allow static 'plugins' to register with the PluginManager.
- */
-class PluginRegistrator {
- friend class StaticPlugin;
-public:
- typedef GameDescriptor (*GameIDQueryFunc)(const char *gameid);
- typedef PluginError (*EngineFactory)(OSystem *syst, Engine **engine);
- typedef GameList (*DetectFunc)(const FSList &fslist);
-
-protected:
- const char *_name;
- const char *_copyright;
- GameIDQueryFunc _qf;
- EngineFactory _ef;
- DetectFunc _df;
- GameList _games;
-
-public:
- PluginRegistrator(const char *name, const char *copyright, GameList games, GameIDQueryFunc qf, EngineFactory ef, DetectFunc df)
- : _name(name), _copyright(copyright), _qf(qf), _ef(ef), _df(df), _games(games) {}
-};
-#endif
-
/** List of plugins. */
typedef Common::Array<Plugin *> PluginList;
@@ -154,13 +105,9 @@ public:
virtual PluginList getPlugins() = 0;
};
-//class PluginManager;
-
/**
* Instances of this class manage all plugins, including loading them,
* making wrapper objects of class Plugin available, and unloading them.
- *
- * @todo Add support for dynamic plugins (this may need additional API, e.g. for a plugin path)
*/
class PluginManager : public Common::Singleton<PluginManager> {
typedef Common::List<PluginProvider *> ProviderList;