aboutsummaryrefslogtreecommitdiff
path: root/backends/plugins/dynamic-plugin.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 /backends/plugins/dynamic-plugin.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 'backends/plugins/dynamic-plugin.h')
-rw-r--r--backends/plugins/dynamic-plugin.h86
1 files changed, 25 insertions, 61 deletions
diff --git a/backends/plugins/dynamic-plugin.h b/backends/plugins/dynamic-plugin.h
index 44b379a625..3ae0b1e644 100644
--- a/backends/plugins/dynamic-plugin.h
+++ b/backends/plugins/dynamic-plugin.h
@@ -27,95 +27,59 @@
#define BACKENDS_PLUGINS_DYNAMICPLUGIN_H
#include "base/plugins.h"
-
-
-/** Type of factory functions which make new Engine objects. */
-typedef PluginError (*EngineFactory)(OSystem *syst, Engine **engine);
-
-typedef const char *(*NameFunc)();
-typedef GameDescriptor (*GameIDQueryFunc)(const char *gameid);
-typedef GameList (*GameIDListFunc)();
-typedef GameList (*DetectFunc)(const FSList &fslist);
+#include "engines/metaengine.h"
class DynamicPlugin : public Plugin {
protected:
typedef void (*VoidFunc)();
- Common::String _name;
- Common::String _copyright;
- GameIDQueryFunc _qf;
- EngineFactory _ef;
- DetectFunc _df;
- GameList _games;
+ typedef MetaEngine *(*MetaAllocFunc)();
+
+ MetaEngine *_metaengine;
virtual VoidFunc findSymbol(const char *symbol) = 0;
public:
- DynamicPlugin() : _qf(0), _ef(0), _df(0), _games() {}
+ DynamicPlugin() : _metaengine(0) {}
+ ~DynamicPlugin() {
+ delete _metaengine;
+ }
- const char *getName() const { return _name.c_str(); }
- const char *getCopyright() const { return _copyright.c_str(); }
+ const char *getName() const {
+ return _metaengine->getName();
+ }
+
+ const char *getCopyright() const {
+ return _metaengine->getCopyright();
+ }
PluginError createInstance(OSystem *syst, Engine **engine) const {
- assert(_ef);
- return (*_ef)(syst, engine);
+ return _metaengine->createInstance(syst, engine);
}
- GameList getSupportedGames() const { return _games; }
+ GameList getSupportedGames() const {
+ return _metaengine->getSupportedGames();
+ }
GameDescriptor findGame(const char *gameid) const {
- assert(_qf);
- return (*_qf)(gameid);
+ return _metaengine->findGame(gameid);
}
GameList detectGames(const FSList &fslist) const {
- assert(_df);
- return (*_df)(fslist);
+ return _metaengine->detectGames(fslist);
}
virtual bool loadPlugin() {
// Query the plugin's name
- NameFunc nameFunc = (NameFunc)findSymbol("PLUGIN_name");
- if (!nameFunc) {
- unloadPlugin();
- return false;
- }
- _name = nameFunc();
-
- // Query the plugin's copyright
- nameFunc = (NameFunc)findSymbol("PLUGIN_copyright");
- if (!nameFunc) {
- unloadPlugin();
- return false;
- }
- _copyright = nameFunc();
-
- // Query the plugin for the game ids it supports
- GameIDListFunc gameListFunc = (GameIDListFunc)findSymbol("PLUGIN_gameIDList");
- if (!gameListFunc) {
- unloadPlugin();
- return false;
- }
- _games = gameListFunc();
-
- // Retrieve the gameid query function
- _qf = (GameIDQueryFunc)findSymbol("PLUGIN_findGameID");
- if (!_qf) {
- unloadPlugin();
- return false;
- }
-
- // Retrieve the factory function
- _ef = (EngineFactory)findSymbol("PLUGIN_createEngine");
- if (!_ef) {
+ MetaAllocFunc metaAlloc = (MetaAllocFunc)findSymbol("PLUGIN_MetaEngine_alloc");
+ if (!metaAlloc) {
unloadPlugin();
return false;
}
- // Retrieve the detector function
- _df = (DetectFunc)findSymbol("PLUGIN_detectGames");
- if (!_df) {
+ _metaengine = metaAlloc();
+ if (!_metaengine) {
unloadPlugin();
return false;
}