Remove CPluginManager direct use of CPlugin::m_Libraries.
This commit is contained in:
parent
bda9defc0f
commit
46c069dbbe
@ -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;
|
||||||
|
@ -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);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user