-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathModuleMgr.cpp
More file actions
79 lines (68 loc) · 1.37 KB
/
ModuleMgr.cpp
File metadata and controls
79 lines (68 loc) · 1.37 KB
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
#include "stdafx.h"
#include "ModuleMgr.h"
ModuleMgr* ModuleMgr::p_moduleMgr = nullptr;
ModuleMgr::ModuleMgr()
{
m_modulesMap.clear();
}
ModuleMgr::~ModuleMgr()
{
}
ModuleMgr* ModuleMgr::getInstance()
{
if ( p_moduleMgr == nullptr )
{
p_moduleMgr = new ModuleMgr;
}
return p_moduleMgr;
}
void ModuleMgr::release()
{
if ( p_moduleMgr != nullptr )
{
delete p_moduleMgr;
p_moduleMgr = nullptr;
}
}
void ModuleMgr::registerModule( BaseModule* p_baseModule )
{
p_baseModule->setModuleId( getNewModuleId() );
m_modulesMap.insert( { p_baseModule->getModuleId(), p_baseModule } );
p_baseModule->install();
}
void ModuleMgr::unregisterModule( BaseModule* p_baseModle )
{
auto iter = m_modulesMap.find( p_baseModle->getModuleId() );
if ( iter == m_modulesMap.end() )
{
return;
}
else
{
p_baseModle->uninstall();
delete p_baseModle;
p_baseModle = nullptr;
m_modulesMap.erase( iter );
}
}
void ModuleMgr::unregisterAll()
{
for ( auto iter = m_modulesMap.rbegin(); iter != m_modulesMap.rend(); ++iter )
{
BaseModule* p_baseModule = iter->second;
p_baseModule->uninstall();
delete p_baseModule;
p_baseModule = nullptr;
}
m_modulesMap.clear();
}
BaseModule* ModuleMgr::getModuleById( unsigned id )
{
auto iter = m_modulesMap.find( id );
if ( iter == m_modulesMap.end() )
{
printf( "getModuleById failed!\n" );
return nullptr;
}
return (*iter).second;
}