blob: 168b9bf5c14d66c29920bb2bce65d088272cf61f (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
|
/*
core/loader.cc
This file is part of the Osirion project and is distributed under
the terms of the GNU General Public License version 2
*/
#include "auxiliary/functions.h"
#include "core/loader.h"
#include "sys/sys.h"
namespace core
{
Loader::Registry Loader::loader_registry;
std::string Loader::loader_label;
Loader::FactoryFuncPtr Loader::find(const char *label)
{
Registry::iterator it = loader_registry.find(label);
if (it == loader_registry.end())
return 0;
else
return (*it).second;
}
Loader::FactoryFuncPtr Loader::find(const std::string &label)
{
return (find(label.c_str()));
}
void Loader::add(const std::string &label, FactoryFuncPtr factory)
{
if (find(label)) {
con_warn << "module '" << label << "' already registered" << std::endl;
return;
}
loader_registry[label] = factory;
con_debug << " registering module '" << label << "'" << std::endl;
}
bool Loader::load(const char *label)
{
FactoryFuncPtr factory = find(label);
if (!factory) {
con_warn << "module '" << label << "' not found" << std::endl;
return false;
}
con_debug << " loading module '" << label << "'" << std::endl;
loader_label.assign(label);
return true;
}
bool Loader::load(const std::string &label)
{
return load(label.c_str());
}
Module *Loader::init()
{
FactoryFuncPtr factory = find(loader_label);
if (!factory) {
con_warn << "module '" << loader_label << "' not found" << std::endl;
}
Module *module = factory();
module->set_label(loader_label);
return module;
}
void Loader::clear()
{
loader_registry.clear();
loader_label.clear();
}
void Loader::list()
{
std::string loaderlist;
for (Registry::iterator it = loader_registry.begin(); it != loader_registry.end(); it++) {
if (loaderlist.size())
loaderlist += " ";
loaderlist += (*it).first;
}
con_print << loaderlist << std::endl;
con_print << loader_registry.size() << " registered " << aux::plural("module", loader_registry.size()) << std::endl;
}
}
|