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;
for (auto iter=m_plugins.begin(); iter!=m_plugins.end(); iter++) {
CPlugin *pl = (*iter);
if (pl->m_Libraries.find(name) != pl->m_Libraries.end()) {
if (pl->HasLibrary(name)) {
found = pl;
break;
}
@ -1107,6 +1107,12 @@ bool CPlugin::ForEachExtVar(const ExtVarCallback& callback)
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)
{
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 */
List<String>::iterator s_iter;
for (s_iter = pPlugin->m_Libraries.begin();
s_iter != pPlugin->m_Libraries.end();
s_iter++)
{
OnLibraryAction((*s_iter).c_str(), LibraryAction_Added);
}
pPlugin->ForEachLibrary([this] (const char *lib) -> void {
OnLibraryAction(lib, LibraryAction_Added);
});
/* :TODO: optimize? does this even matter? */
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)
continue;
for (s_iter=pl->m_Libraries.begin(); s_iter!=pl->m_Libraries.end(); s_iter++)
{
pPlugin->Call_OnLibraryAdded((*s_iter).c_str());
}
pl->ForEachLibrary([pPlugin] (const char *lib) -> void {
pPlugin->Call_OnLibraryAdded(lib);
});
}
return true;
@ -1319,7 +1320,7 @@ void CPluginManager::TryRefreshDependencies(CPlugin *pPlugin)
CPlugin *found = nullptr;
for (auto pl_iter=m_plugins.begin(); pl_iter!=m_plugins.end(); 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;
break;
}
@ -1399,13 +1400,9 @@ void CPluginManager::UnloadPluginImpl(CPlugin *pPlugin)
m_LoadLookup.remove(pPlugin->m_filename);
/* Go through our libraries and tell other plugins they're gone */
List<String>::iterator s_iter;
for (s_iter = pPlugin->m_Libraries.begin();
s_iter != pPlugin->m_Libraries.end();
s_iter++)
{
OnLibraryAction((*s_iter).c_str(), LibraryAction_Removed);
}
pPlugin->ForEachLibrary([this] (const char *lib) -> void {
OnLibraryAction(lib, LibraryAction_Removed);
});
List<IPluginsListener *>::iterator iter;
IPluginsListener *pListener;
@ -2374,16 +2371,8 @@ bool CPluginManager::LibraryExists(const char *lib)
{
continue;
}
List<String>::iterator s_iter;
for (s_iter = pl->m_Libraries.begin();
s_iter != pl->m_Libraries.end();
s_iter++)
{
if ((*s_iter).compare(lib) == 0)
{
return true;
}
}
if (pl->HasLibrary(lib))
return true;
}
return false;

View File

@ -129,7 +129,6 @@ class CPlugin :
public CNativeOwner
{
friend class CPluginManager;
friend class CFunction;
public:
CPlugin(const char *file);
~CPlugin();
@ -164,6 +163,8 @@ public:
typedef ke::Lambda<bool(const sp_pubvar_t *, const ExtVar& ext)> ExtVarCallback;
bool ForEachExtVar(const ExtVarCallback& callback);
void ForEachLibrary(ke::Lambda<void(const char *)> callback);
public:
/**
* Creates a plugin object with default values.
@ -248,6 +249,9 @@ public:
inline void AddLibrary(const char *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 SyncMaxClients(int max_clients);