/[adonthell]/adonthell/src/event/types.cc
ViewVC logotype

Diff of /adonthell/src/event/types.cc

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.2 by ksterker, Sun Aug 14 16:51:20 2005 UTC revision 1.3 by ksterker, Sun Oct 9 07:38:40 2005 UTC
# Line 34  using events::event; Line 34  using events::event;
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      }      }
# Line 72  void event_type::remove_type (const std: Line 66  void event_type::remove_type (const std:
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;

Legend:
Removed from v.1.2  
changed lines
  Added in v.1.3

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26