34 |
using events::event_type; |
using events::event_type; |
35 |
using events::manager_base; |
using events::manager_base; |
36 |
|
|
|
// Types of events registered with the event subsystem by name |
|
|
std::hash_map<std::string, event_type*> event_type::NamedTypes; |
|
|
|
|
|
// Types of events by id |
|
|
std::vector<event_type*> event_type::Types; |
|
|
|
|
37 |
// register a new type of event |
// register a new type of event |
38 |
void event_type::register_type (const std::string & name, manager_base *manager, new_event creator) |
void event_type::register_type (const std::string & name, manager_base *manager, new_event creator) |
39 |
{ |
{ |
40 |
std::hash_map<std::string, event_type*>::iterator i = NamedTypes.find (name); |
std::hash_map<std::string, event_type*>::iterator i = NamedTypes().find (name); |
41 |
if (i == NamedTypes.end()) |
if (i == NamedTypes().end()) |
42 |
{ |
{ |
43 |
NamedTypes[name] = new event_type ((u_int8) Types.size(), manager, creator); |
NamedTypes()[name] = new event_type ((u_int8) Types().size(), manager, creator); |
44 |
Types.push_back (NamedTypes[name]); |
Types().push_back (NamedTypes()[name]); |
45 |
} |
} |
46 |
|
|
47 |
else if ((*i).second == NULL) |
else if ((*i).second == NULL) |
48 |
{ |
{ |
49 |
(*i).second = new event_type ((u_int8) Types.size(), manager, creator); |
(*i).second = new event_type ((u_int8) Types().size(), manager, creator); |
50 |
Types.push_back ((*i).second); |
Types().push_back ((*i).second); |
51 |
} |
} |
52 |
} |
} |
53 |
|
|
54 |
// remove event type from list of registered event types |
// remove event type from list of registered event types |
55 |
void event_type::remove_type (const std::string & name) |
void event_type::remove_type (const std::string & name) |
56 |
{ |
{ |
57 |
std::hash_map<std::string, event_type*>::iterator i = NamedTypes.find (name); |
std::hash_map<std::string, event_type*>::iterator i = NamedTypes().find (name); |
58 |
if (i != NamedTypes.end()) |
if (i != NamedTypes().end()) |
59 |
{ |
{ |
60 |
Types[(*i).second->id()] = NULL; |
Types()[(*i).second->id()] = NULL; |
61 |
delete (*i).second; |
delete (*i).second; |
62 |
(*i).second = NULL; |
(*i).second = NULL; |
63 |
} |
} |
66 |
// get id of given event type |
// get id of given event type |
67 |
u_int8 event_type::get_id (const std::string & name) |
u_int8 event_type::get_id (const std::string & name) |
68 |
{ |
{ |
69 |
std::hash_map<std::string, event_type*>::iterator i = NamedTypes.find (name); |
std::hash_map<std::string, event_type*>::iterator i = NamedTypes().find (name); |
70 |
if (i != NamedTypes.end() && (*i).second != NULL) return (*i).second->id (); |
if (i != NamedTypes().end() && (*i).second != NULL) return (*i).second->id (); |
71 |
|
|
72 |
fprintf (stderr, "event_type::get_id: event type '%s' not registered!\n", name.c_str()); |
fprintf (stderr, "*** event_type::get_id: event type '%s' not registered!\n", name.c_str()); |
73 |
return 255; |
return 255; |
74 |
} |
} |
75 |
|
|
76 |
// instanciate new event of given type |
// instanciate new event of given type |
77 |
event *event_type::instanciate_event (const std::string & name) |
event *event_type::instanciate_event (const std::string & name) |
78 |
{ |
{ |
79 |
std::hash_map<std::string, event_type*>::iterator i = NamedTypes.find (name); |
std::hash_map<std::string, event_type*>::iterator i = NamedTypes().find (name); |
80 |
if (i != NamedTypes.end() && (*i).second != NULL) return (*i).second->instanciate (); |
if (i != NamedTypes().end() && (*i).second != NULL) return (*i).second->instanciate (); |
81 |
|
|
82 |
fprintf (stderr, "event_type::instanciate_event: event type '%s' not registered!\n", name.c_str()); |
fprintf (stderr, "*** event_type::instanciate_event: event type '%s' not registered!\n", name.c_str()); |
83 |
return NULL; |
return NULL; |
84 |
} |
} |
85 |
|
|
86 |
// get manager for given event id |
// get manager for given event id |
87 |
manager_base *event_type::get_manager (const u_int8 & id) |
manager_base *event_type::get_manager (const u_int8 & id) |
88 |
{ |
{ |
89 |
if (id < Types.size() && Types[id] != NULL) return Types[id]->manager (); |
if (id < Types().size() && Types()[id] != NULL) return Types()[id]->manager (); |
90 |
|
|
91 |
fprintf (stderr, "event_type::get_manager: event id '%i' not registered!\n", id); |
fprintf (stderr, "*** event_type::get_manager: event id '%i' not registered!\n", id); |
92 |
return NULL; |
return NULL; |
93 |
} |
} |
94 |
|
|
95 |
|
// Types of events registered with the event subsystem by name |
96 |
|
std::hash_map<std::string, event_type*>& event_type::NamedTypes () |
97 |
|
{ |
98 |
|
static std::hash_map<std::string, event_type*> *NamedTypes = new std::hash_map<std::string, event_type*>(); |
99 |
|
return *NamedTypes; |
100 |
|
} |
101 |
|
|
102 |
|
// Types of events by id |
103 |
|
std::vector<event_type*>& event_type::Types () |
104 |
|
{ |
105 |
|
static std::vector<event_type*> *Types = new std::vector<event_type*>(); |
106 |
|
return *Types; |
107 |
|
} |
108 |
|
|
109 |
event_type::event_type (const u_int8 & id, manager_base *manager, new_event creator) |
event_type::event_type (const u_int8 & id, manager_base *manager, new_event creator) |
110 |
{ |
{ |
111 |
Id = id; |
Id = id; |