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