mirror of
https://github.com/cookiengineer/audacity
synced 2025-06-17 16:40:07 +02:00
Simplify repeated lookups and iterations in PluginManager
This commit is contained in:
parent
8fda526577
commit
731ab8d554
@ -22,7 +22,6 @@ class wxCommandEvent;
|
|||||||
class AudacityProject;
|
class AudacityProject;
|
||||||
class CommandContext;
|
class CommandContext;
|
||||||
class CommandManager;
|
class CommandManager;
|
||||||
class PluginDescriptor;
|
|
||||||
class Track;
|
class Track;
|
||||||
class TrackList;
|
class TrackList;
|
||||||
class ViewInfo;
|
class ViewInfo;
|
||||||
|
@ -1422,18 +1422,14 @@ RegistryPath PluginManager::GetPluginEnabledSetting(
|
|||||||
bool PluginManager::IsPluginRegistered(
|
bool PluginManager::IsPluginRegistered(
|
||||||
const PluginPath &path, const TranslatableString *pName)
|
const PluginPath &path, const TranslatableString *pName)
|
||||||
{
|
{
|
||||||
for (PluginMap::iterator iter = mPlugins.begin(); iter != mPlugins.end(); ++iter)
|
for (auto &pair : mPlugins) {
|
||||||
{
|
if (auto &descriptor = pair.second; descriptor.GetPath() == path) {
|
||||||
auto &descriptor = iter->second;
|
|
||||||
if (descriptor.GetPath() == path)
|
|
||||||
{
|
|
||||||
if (pName)
|
if (pName)
|
||||||
descriptor.SetSymbol(
|
descriptor.SetSymbol(
|
||||||
{ descriptor.GetSymbol().Internal(), *pName });
|
{ descriptor.GetSymbol().Internal(), *pName });
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2056,12 +2052,8 @@ void PluginManager::LoadGroup(FileConfig *pRegistry, PluginType type)
|
|||||||
groupName = ConvertID(groupName);
|
groupName = ConvertID(groupName);
|
||||||
|
|
||||||
// Bypass group if the ID is already in use
|
// Bypass group if the ID is already in use
|
||||||
if (mPlugins.find(groupName) != mPlugins.end())
|
if (mPlugins.count(groupName))
|
||||||
{
|
|
||||||
pRegistry->SetPath(wxT(".."));
|
|
||||||
|
|
||||||
continue;
|
continue;
|
||||||
}
|
|
||||||
|
|
||||||
// Set the ID and type
|
// Set the ID and type
|
||||||
plug.SetID(groupName);
|
plug.SetID(groupName);
|
||||||
@ -2071,11 +2063,9 @@ void PluginManager::LoadGroup(FileConfig *pRegistry, PluginType type)
|
|||||||
if (!pRegistry->Read(KEY_PROVIDERID, &strVal, wxEmptyString))
|
if (!pRegistry->Read(KEY_PROVIDERID, &strVal, wxEmptyString))
|
||||||
{
|
{
|
||||||
// Bypass group if the provider isn't valid
|
// Bypass group if the provider isn't valid
|
||||||
if (!strVal.empty() && mPlugins.find(strVal) == mPlugins.end())
|
if (!strVal.empty() && !mPlugins.count(strVal))
|
||||||
{
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
plug.SetProviderID(PluginID(strVal));
|
plug.SetProviderID(PluginID(strVal));
|
||||||
|
|
||||||
// Get the path (optional)
|
// Get the path (optional)
|
||||||
@ -2297,9 +2287,8 @@ void PluginManager::Save()
|
|||||||
void PluginManager::SaveGroup(FileConfig *pRegistry, PluginType type)
|
void PluginManager::SaveGroup(FileConfig *pRegistry, PluginType type)
|
||||||
{
|
{
|
||||||
wxString group = GetPluginTypeString(type);
|
wxString group = GetPluginTypeString(type);
|
||||||
for (PluginMap::iterator iter = mPlugins.begin(); iter != mPlugins.end(); ++iter)
|
for (auto &pair : mPlugins) {
|
||||||
{
|
auto & plug = pair.second;
|
||||||
PluginDescriptor & plug = iter->second;
|
|
||||||
|
|
||||||
if (plug.GetPluginType() != type)
|
if (plug.GetPluginType() != type)
|
||||||
{
|
{
|
||||||
@ -2383,20 +2372,13 @@ void PluginManager::SaveGroup(FileConfig *pRegistry, PluginType type)
|
|||||||
// and built-ins.
|
// and built-ins.
|
||||||
void PluginManager::CheckForUpdates(bool bFast)
|
void PluginManager::CheckForUpdates(bool bFast)
|
||||||
{
|
{
|
||||||
// Get ModuleManager reference
|
|
||||||
ModuleManager & mm = ModuleManager::Get();
|
ModuleManager & mm = ModuleManager::Get();
|
||||||
|
|
||||||
wxArrayString pathIndex;
|
wxArrayString pathIndex;
|
||||||
for (PluginMap::iterator iter = mPlugins.begin(); iter != mPlugins.end(); ++iter)
|
for (auto &pair : mPlugins) {
|
||||||
{
|
auto &plug = pair.second;
|
||||||
PluginDescriptor & plug = iter->second;
|
|
||||||
|
|
||||||
// Bypass 2.1.0 placeholders...remove this after a few releases past 2.1.0
|
// Bypass 2.1.0 placeholders...remove this after a few releases past 2.1.0
|
||||||
if (plug.GetPluginType() == PluginTypeNone)
|
if (plug.GetPluginType() != PluginTypeNone)
|
||||||
{
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
pathIndex.push_back(plug.GetPath().BeforeFirst(wxT(';')));
|
pathIndex.push_back(plug.GetPath().BeforeFirst(wxT(';')));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2411,9 +2393,8 @@ void PluginManager::CheckForUpdates(bool bFast)
|
|||||||
//
|
//
|
||||||
// When the user enables the plugin, each provider that reported it will be asked
|
// When the user enables the plugin, each provider that reported it will be asked
|
||||||
// to register the plugin.
|
// to register the plugin.
|
||||||
for (PluginMap::iterator iter = mPlugins.begin(); iter != mPlugins.end(); ++iter)
|
for (auto &pair : mPlugins) {
|
||||||
{
|
auto &plug = pair.second;
|
||||||
PluginDescriptor & plug = iter->second;
|
|
||||||
const PluginID & plugID = plug.GetID();
|
const PluginID & plugID = plug.GetID();
|
||||||
const wxString & plugPath = plug.GetPath();
|
const wxString & plugPath = plug.GetPath();
|
||||||
PluginType plugType = plug.GetPluginType();
|
PluginType plugType = plug.GetPluginType();
|
||||||
@ -2506,37 +2487,21 @@ const PluginID & PluginManager::RegisterPlugin(
|
|||||||
// a better solution is devised.
|
// a better solution is devised.
|
||||||
void PluginManager::UnregisterPlugin(const PluginID & ID)
|
void PluginManager::UnregisterPlugin(const PluginID & ID)
|
||||||
{
|
{
|
||||||
if (mPlugins.find(ID) == mPlugins.end())
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
mPlugins.erase(ID);
|
mPlugins.erase(ID);
|
||||||
}
|
}
|
||||||
|
|
||||||
int PluginManager::GetPluginCount(PluginType type)
|
int PluginManager::GetPluginCount(PluginType type)
|
||||||
{
|
{
|
||||||
int num = 0;
|
return count_if(mPlugins.begin(), mPlugins.end(), [type](auto &pair){
|
||||||
|
return pair.second.GetPluginType() == type; });
|
||||||
for (PluginMap::iterator iter = mPlugins.begin(); iter != mPlugins.end(); ++iter)
|
|
||||||
{
|
|
||||||
if (iter->second.GetPluginType() == type)
|
|
||||||
{
|
|
||||||
num++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return num;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const PluginDescriptor *PluginManager::GetPlugin(const PluginID & ID)
|
const PluginDescriptor *PluginManager::GetPlugin(const PluginID & ID)
|
||||||
{
|
{
|
||||||
if (mPlugins.find(ID) == mPlugins.end())
|
if (auto iter = mPlugins.find(ID); iter == mPlugins.end())
|
||||||
{
|
return nullptr;
|
||||||
return NULL;
|
else
|
||||||
}
|
return &iter->second;
|
||||||
|
|
||||||
return &mPlugins[ID];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const PluginDescriptor *PluginManager::GetFirstPlugin(int type)
|
const PluginDescriptor *PluginManager::GetFirstPlugin(int type)
|
||||||
@ -2630,56 +2595,49 @@ const PluginDescriptor *PluginManager::GetNextPluginForEffectType(EffectType typ
|
|||||||
|
|
||||||
bool PluginManager::IsPluginEnabled(const PluginID & ID)
|
bool PluginManager::IsPluginEnabled(const PluginID & ID)
|
||||||
{
|
{
|
||||||
if (mPlugins.find(ID) == mPlugins.end())
|
if (auto iter = mPlugins.find(ID); iter == mPlugins.end())
|
||||||
{
|
|
||||||
return false;
|
return false;
|
||||||
}
|
else
|
||||||
|
return iter->second.IsEnabled();
|
||||||
return mPlugins[ID].IsEnabled();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void PluginManager::EnablePlugin(const PluginID & ID, bool enable)
|
void PluginManager::EnablePlugin(const PluginID & ID, bool enable)
|
||||||
{
|
{
|
||||||
if (mPlugins.find(ID) == mPlugins.end())
|
if (auto iter = mPlugins.find(ID); iter == mPlugins.end())
|
||||||
{
|
|
||||||
return;
|
return;
|
||||||
}
|
else
|
||||||
|
iter->second.SetEnabled(enable);
|
||||||
return mPlugins[ID].SetEnabled(enable);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const ComponentInterfaceSymbol & PluginManager::GetSymbol(const PluginID & ID)
|
const ComponentInterfaceSymbol & PluginManager::GetSymbol(const PluginID & ID)
|
||||||
{
|
{
|
||||||
if (mPlugins.find(ID) == mPlugins.end())
|
if (auto iter = mPlugins.find(ID); iter == mPlugins.end()) {
|
||||||
{
|
|
||||||
static ComponentInterfaceSymbol empty;
|
static ComponentInterfaceSymbol empty;
|
||||||
return empty;
|
return empty;
|
||||||
}
|
}
|
||||||
|
else
|
||||||
return mPlugins[ID].GetSymbol();
|
return iter->second.GetSymbol();
|
||||||
}
|
}
|
||||||
|
|
||||||
ComponentInterface *PluginManager::GetInstance(const PluginID & ID)
|
ComponentInterface *PluginManager::GetInstance(const PluginID & ID)
|
||||||
{
|
{
|
||||||
if (mPlugins.find(ID) == mPlugins.end())
|
if (auto iter = mPlugins.find(ID); iter == mPlugins.end())
|
||||||
{
|
return nullptr;
|
||||||
return NULL;
|
else {
|
||||||
}
|
auto &plug = iter->second;
|
||||||
|
|
||||||
PluginDescriptor & plug = mPlugins[ID];
|
|
||||||
|
|
||||||
// If not dealing with legacy effects, make sure the provider is loaded
|
// If not dealing with legacy effects, make sure the provider is loaded
|
||||||
if (!plug.IsEffectLegacy())
|
if (!plug.IsEffectLegacy())
|
||||||
{
|
{
|
||||||
const PluginID & prov = plug.GetProviderID();
|
const PluginID & prov = plug.GetProviderID();
|
||||||
if (mPlugins.find(prov) == mPlugins.end())
|
if (auto iter2 = mPlugins.find(prov); iter2 == mPlugins.end())
|
||||||
{
|
return nullptr;
|
||||||
return NULL;
|
else
|
||||||
}
|
iter2->second.GetInstance();
|
||||||
mPlugins[prov].GetInstance();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return plug.GetInstance();
|
return plug.GetInstance();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
PluginID PluginManager::GetID(ModuleInterface *module)
|
PluginID PluginManager::GetID(ModuleInterface *module)
|
||||||
@ -3005,12 +2963,10 @@ RegistryPath PluginManager::SettingsPath(const PluginID & ID, bool shared)
|
|||||||
// be changed across Audacity versions, or else compatibility of the
|
// be changed across Audacity versions, or else compatibility of the
|
||||||
// configuration files will break.
|
// configuration files will break.
|
||||||
|
|
||||||
if (mPlugins.find(ID) == mPlugins.end())
|
if (auto iter = mPlugins.find(ID); iter == mPlugins.end())
|
||||||
{
|
return {};
|
||||||
return wxEmptyString;
|
else {
|
||||||
}
|
const PluginDescriptor & plug = iter->second;
|
||||||
|
|
||||||
const PluginDescriptor & plug = mPlugins[ID];
|
|
||||||
|
|
||||||
wxString id = GetPluginTypeString(plug.GetPluginType()) +
|
wxString id = GetPluginTypeString(plug.GetPluginType()) +
|
||||||
wxT("_") +
|
wxT("_") +
|
||||||
@ -3025,6 +2981,7 @@ RegistryPath PluginManager::SettingsPath(const PluginID & ID, bool shared)
|
|||||||
wxCONFIG_PATH_SEPARATOR +
|
wxCONFIG_PATH_SEPARATOR +
|
||||||
(shared ? wxT("shared") : wxT("private")) +
|
(shared ? wxT("shared") : wxT("private")) +
|
||||||
wxCONFIG_PATH_SEPARATOR;
|
wxCONFIG_PATH_SEPARATOR;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Return value is a key for lookup in a config file */
|
/* Return value is a key for lookup in a config file */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user