Remove CPluginManager direct use of CPlugin::m_Libraries.

This commit is contained in:
David Anderson 2015-09-19 17:16:44 -07:00
parent bda9defc0f
commit 46c069dbbe
2 changed files with 24 additions and 31 deletions

View File

@ -1052,7 +1052,7 @@ bool CPluginManager::FindOrRequirePluginDeps(CPlugin *pPlugin, char *error, size
CPlugin *found; CPlugin *found;
for (auto iter=m_plugins.begin(); iter!=m_plugins.end(); iter++) { for (auto iter=m_plugins.begin(); iter!=m_plugins.end(); iter++) {
CPlugin *pl = (*iter); CPlugin *pl = (*iter);
if (pl->m_Libraries.find(name) != pl->m_Libraries.end()) { if (pl->HasLibrary(name)) {
found = pl; found = pl;
break; break;
} }
@ -1107,6 +1107,12 @@ bool CPlugin::ForEachExtVar(const ExtVarCallback& callback)
return true; return true;
} }
void CPlugin::ForEachLibrary(ke::Lambda<void(const char *)> callback)
{
for (auto iter = m_Libraries.begin(); iter != m_Libraries.end(); iter++)
callback((*iter).c_str());
}
void CPluginManager::LoadExtensions(CPlugin *pPlugin) void CPluginManager::LoadExtensions(CPlugin *pPlugin)
{ {
auto callback = [pPlugin] (const sp_pubvar_t *pubvar, const CPlugin::ExtVar& ext) -> bool auto callback = [pPlugin] (const sp_pubvar_t *pubvar, const CPlugin::ExtVar& ext) -> bool
@ -1281,13 +1287,9 @@ bool CPluginManager::RunSecondPass(CPlugin *pPlugin, char *error, size_t maxleng
} }
/* Go through our libraries and tell other plugins they're added */ /* Go through our libraries and tell other plugins they're added */
List<String>::iterator s_iter; pPlugin->ForEachLibrary([this] (const char *lib) -> void {
for (s_iter = pPlugin->m_Libraries.begin(); OnLibraryAction(lib, LibraryAction_Added);
s_iter != pPlugin->m_Libraries.end(); });
s_iter++)
{
OnLibraryAction((*s_iter).c_str(), LibraryAction_Added);
}
/* :TODO: optimize? does this even matter? */ /* :TODO: optimize? does this even matter? */
pPlugin->GetPhrases()->AddPhraseFile("core.phrases"); pPlugin->GetPhrases()->AddPhraseFile("core.phrases");
@ -1300,10 +1302,9 @@ bool CPluginManager::RunSecondPass(CPlugin *pPlugin, char *error, size_t maxleng
if (pl == pPlugin || pl->GetStatus() != Plugin_Running) if (pl == pPlugin || pl->GetStatus() != Plugin_Running)
continue; continue;
for (s_iter=pl->m_Libraries.begin(); s_iter!=pl->m_Libraries.end(); s_iter++) pl->ForEachLibrary([pPlugin] (const char *lib) -> void {
{ pPlugin->Call_OnLibraryAdded(lib);
pPlugin->Call_OnLibraryAdded((*s_iter).c_str()); });
}
} }
return true; return true;
@ -1319,7 +1320,7 @@ void CPluginManager::TryRefreshDependencies(CPlugin *pPlugin)
CPlugin *found = nullptr; CPlugin *found = nullptr;
for (auto pl_iter=m_plugins.begin(); pl_iter!=m_plugins.end(); pl_iter++) { for (auto pl_iter=m_plugins.begin(); pl_iter!=m_plugins.end(); pl_iter++) {
CPlugin *search = (*pl_iter); CPlugin *search = (*pl_iter);
if (search->m_Libraries.find(*req_iter) != search->m_Libraries.end()) { if (search->HasLibrary((*req_iter).c_str())) {
found = search; found = search;
break; break;
} }
@ -1399,13 +1400,9 @@ void CPluginManager::UnloadPluginImpl(CPlugin *pPlugin)
m_LoadLookup.remove(pPlugin->m_filename); m_LoadLookup.remove(pPlugin->m_filename);
/* Go through our libraries and tell other plugins they're gone */ /* Go through our libraries and tell other plugins they're gone */
List<String>::iterator s_iter; pPlugin->ForEachLibrary([this] (const char *lib) -> void {
for (s_iter = pPlugin->m_Libraries.begin(); OnLibraryAction(lib, LibraryAction_Removed);
s_iter != pPlugin->m_Libraries.end(); });
s_iter++)
{
OnLibraryAction((*s_iter).c_str(), LibraryAction_Removed);
}
List<IPluginsListener *>::iterator iter; List<IPluginsListener *>::iterator iter;
IPluginsListener *pListener; IPluginsListener *pListener;
@ -2374,16 +2371,8 @@ bool CPluginManager::LibraryExists(const char *lib)
{ {
continue; continue;
} }
List<String>::iterator s_iter; if (pl->HasLibrary(lib))
for (s_iter = pl->m_Libraries.begin(); return true;
s_iter != pl->m_Libraries.end();
s_iter++)
{
if ((*s_iter).compare(lib) == 0)
{
return true;
}
}
} }
return false; return false;

View File

@ -129,7 +129,6 @@ class CPlugin :
public CNativeOwner public CNativeOwner
{ {
friend class CPluginManager; friend class CPluginManager;
friend class CFunction;
public: public:
CPlugin(const char *file); CPlugin(const char *file);
~CPlugin(); ~CPlugin();
@ -164,6 +163,8 @@ public:
typedef ke::Lambda<bool(const sp_pubvar_t *, const ExtVar& ext)> ExtVarCallback; typedef ke::Lambda<bool(const sp_pubvar_t *, const ExtVar& ext)> ExtVarCallback;
bool ForEachExtVar(const ExtVarCallback& callback); bool ForEachExtVar(const ExtVarCallback& callback);
void ForEachLibrary(ke::Lambda<void(const char *)> callback);
public: public:
/** /**
* Creates a plugin object with default values. * Creates a plugin object with default values.
@ -248,6 +249,9 @@ public:
inline void AddLibrary(const char *name) { inline void AddLibrary(const char *name) {
m_Libraries.push_back(name); m_Libraries.push_back(name);
} }
inline bool HasLibrary(const char *name) {
return m_Libraries.find(name) != m_Libraries.end();
}
void LibraryActions(LibraryAction action); void LibraryActions(LibraryAction action);
void SyncMaxClients(int max_clients); void SyncMaxClients(int max_clients);