diff --git a/core/logic/PluginSys.cpp b/core/logic/PluginSys.cpp index aacf198b..551ba27e 100644 --- a/core/logic/PluginSys.cpp +++ b/core/logic/PluginSys.cpp @@ -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 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::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::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::iterator iter; IPluginsListener *pListener; @@ -2374,16 +2371,8 @@ bool CPluginManager::LibraryExists(const char *lib) { continue; } - List::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; diff --git a/core/logic/PluginSys.h b/core/logic/PluginSys.h index 53da0349..a630b756 100644 --- a/core/logic/PluginSys.h +++ b/core/logic/PluginSys.h @@ -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 ExtVarCallback; bool ForEachExtVar(const ExtVarCallback& callback); + + void ForEachLibrary(ke::Lambda 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);