you can now see which plugin returned the iface

--HG--
extra : convert_revision : svn%3Ac2935e3e-5518-0410-8daf-afa5dab7d4e3/trunk%40140
This commit is contained in:
David Anderson 2005-10-20 14:52:49 +00:00
parent 2cabdcf3da
commit c1fb10cbf0
5 changed files with 18 additions and 9 deletions

View File

@ -136,8 +136,11 @@ void CSmmAPI::AddListener(ISmmPlugin *plugin, IMetamodListener *pListener)
pl->m_Events.push_back(pListener); pl->m_Events.push_back(pListener);
} }
void *CSmmAPI::MetaFactory(const char *iface, int *_ret) void *CSmmAPI::MetaFactory(const char *iface, int *_ret, PluginId *id)
{ {
if (id)
*id = 0;
if (!iface) if (!iface)
return NULL; return NULL;
@ -170,6 +173,8 @@ void *CSmmAPI::MetaFactory(const char *iface, int *_ret)
{ {
if (_ret) if (_ret)
*_ret = ret; *_ret = ret;
if (id)
*id = pl->m_Id;
return val; return val;
} }
} }

View File

@ -49,7 +49,7 @@ namespace SourceMM
virtual void GetApiVersions(int &major, int &minor, int &plvers, int &plmin); virtual void GetApiVersions(int &major, int &minor, int &plvers, int &plmin);
virtual void GetShVersions(int &shvers, int &shimpl); virtual void GetShVersions(int &shvers, int &shimpl);
virtual void AddListener(ISmmPlugin *plugin, IMetamodListener *pListener); virtual void AddListener(ISmmPlugin *plugin, IMetamodListener *pListener);
virtual void *MetaFactory(const char *iface, int *ret); virtual void *MetaFactory(const char *iface, int *ret, PluginId *id);
public: public:
bool CacheCmds(); bool CacheCmds();
private: private:

View File

@ -16,6 +16,8 @@
* @file IPluginManager.h * @file IPluginManager.h
*/ */
typedef int PluginId;
#include "ISmmPlugin.h" #include "ISmmPlugin.h"
/** /**

View File

@ -68,8 +68,15 @@ public: //Added in 1.10 (1:0)
virtual void GetShVersions(int &shvers, int &shimpl) =0; virtual void GetShVersions(int &shvers, int &shimpl) =0;
//Binds an event listener to your plugin //Binds an event listener to your plugin
virtual void AddListener(ISmmPlugin *plugin, IMetamodListener *pListener) =0; virtual void AddListener(ISmmPlugin *plugin, IMetamodListener *pListener) =0;
//Queries the metamod factory /**
virtual void *MetaFactory(const char *iface, int *ret) =0; * @brief Queries the metamod factory
*
* @param iface String containing interface name
* @param ret Optional pointer to store return status
* @param id Optional pointer to store id of plugin that overrode interface, 0 if none
* @return Returned pointer
*/
virtual void *MetaFactory(const char *iface, int *ret, PluginId *id) =0;
}; };

View File

@ -24,7 +24,6 @@
#define PLAPI_NAME "ISmmPlugin" #define PLAPI_NAME "ISmmPlugin"
class ISmmAPI; class ISmmAPI;
typedef int PluginId;
class ISmmPlugin class ISmmPlugin
{ {
@ -224,10 +223,6 @@ public:
g_PLAPI = static_cast<ISmmPlugin *>(this); \ g_PLAPI = static_cast<ISmmPlugin *>(this); \
g_PLID = id; g_PLID = id;
#define FACTORY_RETURN(mres, value) \
g_SMAPI->SetLastMetaReturn(mres); \
return value;
#define META_LOG g_SMAPI->LogMsg #define META_LOG g_SMAPI->LogMsg
#define META_REGCMD(name) g_SMAPI->RegisterConCmdBase(g_PLAPI, name##_command) #define META_REGCMD(name) g_SMAPI->RegisterConCmdBase(g_PLAPI, name##_command)
#define META_REGCVAR(var) g_SMAPI->RegisterConCmdBase(g_PLAPI, var) #define META_REGCVAR(var) g_SMAPI->RegisterConCmdBase(g_PLAPI, var)