44
typedef std::map<std::string, Library *> LibraryMap;
45
typedef std::map<std::string, Module *> ModuleMap;
44
std::map<std::string, Library *> library_map;
45
std::map<std::string, Module *> module_map;
46
std::map<std::string, plugin::Plugin *> plugin_registry;
47
LibraryMap library_registry_;
48
ModuleMap module_registry_;
50
plugin::Plugin::map plugin_registry;
74
78
std::vector<Module *> getList(bool active);
76
const std::map<std::string, plugin::Plugin *> &getPluginsMap() const
80
const plugin::Plugin::map &getPluginsMap() const
78
82
return plugin_registry;
81
const std::map<std::string, Module *> &getModulesMap() const
85
const ModuleMap &getModulesMap() const
87
return module_registry_;
86
90
Library *addLibrary(const std::string &plugin_name, bool builtin= false);
93
97
void add(T *plugin)
95
99
bool failed= false;
100
std::string plugin_type(plugin->getTypeName());
101
std::transform(plugin_type.begin(), plugin_type.end(),
102
plugin_type.begin(), ::tolower);
96
103
std::string plugin_name(plugin->getName());
97
104
std::transform(plugin_name.begin(), plugin_name.end(),
98
105
plugin_name.begin(), ::tolower);
99
if (plugin_registry.find(plugin_name) != plugin_registry.end())
106
if (plugin_registry.find(std::make_pair(plugin_type, plugin_name)) != plugin_registry.end())
101
108
errmsg_printf(ERRMSG_LVL_ERROR,
102
_("Loading plugin %s failed: a plugin by that name already "
103
"exists.\n"), plugin->getName().c_str());
109
_("Loading plugin %s failed: a %s plugin by that name "
110
"already exists.\n"),
111
plugin->getTypeName().c_str(),
112
plugin->getName().c_str());
106
115
if (T::addPlugin(plugin))
110
122
errmsg_printf(ERRMSG_LVL_ERROR,
111
_("Fatal error: Failed initializing %s plugin.\n"),
123
_("Fatal error: Failed initializing %s::%s plugin.\n"),
124
plugin->getTypeName().c_str(),
112
125
plugin->getName().c_str());
115
plugin_registry.insert(std::pair<std::string, plugin::Plugin *>(plugin_name, plugin));
128
plugin_registry.insert(std::make_pair(std::make_pair(plugin_type, plugin_name), plugin));
118
131
template<class T>
119
132
void remove(T *plugin)
134
std::string plugin_type(plugin->getTypeName());
135
std::transform(plugin_type.begin(), plugin_type.end(),
136
plugin_type.begin(), ::tolower);
121
137
std::string plugin_name(plugin->getName());
122
138
std::transform(plugin_name.begin(), plugin_name.end(),
123
139
plugin_name.begin(), ::tolower);
124
140
T::removePlugin(plugin);
125
plugin_registry.erase(plugin_name);
141
plugin_registry.erase(std::make_pair(plugin_type, plugin_name));