diff options
author | Max Horn | 2008-02-03 18:56:47 +0000 |
---|---|---|
committer | Max Horn | 2008-02-03 18:56:47 +0000 |
commit | 8a73356a2d6e2d6b7ecefb53e0d5e82484f0e697 (patch) | |
tree | 7a5fbed1f61904961fad43411f65d8e174955f2c /backends/plugins | |
parent | 15975bdf7324a8b892562768fe73b6e17816d56f (diff) | |
download | scummvm-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')
-rw-r--r-- | backends/plugins/dynamic-plugin.h | 86 |
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; } |