File: modulemanager.cpp

package info (click to toggle)
korelib 0.0.1-8
  • links: PTS
  • area: main
  • in suites: woody
  • size: 1,788 kB
  • ctags: 1,918
  • sloc: sh: 8,555; cpp: 3,989; makefile: 633; ansic: 65
file content (99 lines) | stat: -rw-r--r-- 2,565 bytes parent folder | download
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
95
96
97
98
99

#include <kore/version.h>
#include <kore/modulemanager.h>

#define MM_MAJOR 0
#define MM_MINOR 0
#define MM_REVISION 1
#define MM_VERSION "0.0.1"
#define MM_API_MAJOR 0
#define MM_API_MINOR 0
#define MM_API_REVISION 1
#define MM_API_VERSION "0.0.1"
#define MM_NAME "Module Manager"
#define MM_TYPE "Module Manager"
#define MM_DESCRIPTION "Default Kore Module Manager"
#define MM_SERVICE "Kore/Kernel/Module Manager"
#define MM_SERVICE_DESCRIPTION "Kore Module Manager"

using namespace kore;

ModuleManager::ModuleManager()
{
    _mmVersion = new Version(MM_MAJOR,MM_MINOR,MM_REVISION,MM_VERSION);
    _mmAPIVersion = new Version(MM_API_MAJOR,MM_API_MINOR,MM_API_REVISION,MM_API_VERSION);
    _mmInfo = new Info(this, MM_NAME, MM_TYPE, MM_DESCRIPTION, _mmVersion, _mmAPIVersion);
    setInfo(_mmInfo);
    _mmService = new Service(this, MM_SERVICE, MM_SERVICE_DESCRIPTION);
    addService(_mmService);
}
ModuleManager::~ModuleManager()
{
    unregisterModules();
    delete _mmInfo;
    delete _mmVersion;
    delete _mmAPIVersion;
    delete _mmService;
}

void ModuleManager::registerModule(Module* module)
{
    module->registeringModule(this);
    _modules.insert(module);
    module->moduleRegistered(this);
}

void ModuleManager::unregisterModule(Module* module)
{
    module->unregisteringModule(this);
    _modules.erase(_modules.find(module));
    module->moduleUnregistered(this);
}

void ModuleManager::registerModules(Module** modules)
{
    for(int i = 0; modules[i]; i++)
        registerModule(modules[i]);
}
void ModuleManager::unregisterModules()
{
    int n = _modules.size();
#ifdef WIN32
    mod_set_type::iterator* it = new mod_set_type::iterator[n];
    mod_set_type::iterator b,e;
#else
    mod_set_type::const_iterator* it = new mod_set_type::const_iterator[n];
    mod_set_type::const_iterator b,e;
#endif
    b = _modules.begin();
    e = _modules.end();
    int i = 0;
#ifdef WIN32
	mod_set_type::iterator j;
#else
	mod_set_type::const_iterator j;
#endif
    for( j = b; j != e; ++j, ++i )
        it[i] = j;
    for( i = 0; i < n; i++)
    {
        (*it[i])->unregisteringModule(this);
        Module* mod = *it[i];
        _modules.erase(it[i]);
        mod->moduleUnregistered(this);
    }
}

Module** ModuleManager::registeredModules() const
{
    int n = _modules.size();
    Module** mod = new Module*[n+1];
    mod_set_type::const_iterator b,e;
    b = _modules.begin();
    e = _modules.end();
    int i = 0;
    for( mod_set_type::const_iterator j = b; j != e; ++j, ++i )
        mod[i] = *j;
    mod[i] = 0;
    return mod;
}