Index: src/event/types.cc =================================================================== RCS file: /cvsroot/adonthell/adonthell/src/event/types.cc,v retrieving revision 1.2 diff -u -r1.2 types.cc --- src/event/types.cc 14 Aug 2005 16:51:20 -0000 1.2 +++ src/event/types.cc 10 Sep 2005 23:24:43 -0000 @@ -34,36 +34,30 @@ using events::event_type; using events::manager_base; -// Types of events registered with the event subsystem by name -std::hash_map event_type::NamedTypes; - -// Types of events by id -std::vector event_type::Types; - // register a new type of event void event_type::register_type (const std::string & name, manager_base *manager, new_event creator) { - std::hash_map::iterator i = NamedTypes.find (name); - if (i == NamedTypes.end()) + std::hash_map::iterator i = NamedTypes().find (name); + if (i == NamedTypes().end()) { - NamedTypes[name] = new event_type ((u_int8) Types.size(), manager, creator); - Types.push_back (NamedTypes[name]); + NamedTypes()[name] = new event_type ((u_int8) Types().size(), manager, creator); + Types().push_back (NamedTypes()[name]); } else if ((*i).second == NULL) { - (*i).second = new event_type ((u_int8) Types.size(), manager, creator); - Types.push_back ((*i).second); + (*i).second = new event_type ((u_int8) Types().size(), manager, creator); + Types().push_back ((*i).second); } } // remove event type from list of registered event types void event_type::remove_type (const std::string & name) { - std::hash_map::iterator i = NamedTypes.find (name); - if (i != NamedTypes.end()) + std::hash_map::iterator i = NamedTypes().find (name); + if (i != NamedTypes().end()) { - Types[(*i).second->id()] = NULL; + Types()[(*i).second->id()] = NULL; delete (*i).second; (*i).second = NULL; } @@ -72,8 +66,8 @@ // get id of given event type u_int8 event_type::get_id (const std::string & name) { - std::hash_map::iterator i = NamedTypes.find (name); - if (i != NamedTypes.end() && (*i).second != NULL) return (*i).second->id (); + std::hash_map::iterator i = NamedTypes().find (name); + if (i != NamedTypes().end() && (*i).second != NULL) return (*i).second->id (); fprintf (stderr, "event_type::get_id: event type '%s' not registered!\n", name.c_str()); return 255; @@ -82,8 +76,8 @@ // instanciate new event of given type event *event_type::instanciate_event (const std::string & name) { - std::hash_map::iterator i = NamedTypes.find (name); - if (i != NamedTypes.end() && (*i).second != NULL) return (*i).second->instanciate (); + std::hash_map::iterator i = NamedTypes().find (name); + if (i != NamedTypes().end() && (*i).second != NULL) return (*i).second->instanciate (); fprintf (stderr, "event_type::instanciate_event: event type '%s' not registered!\n", name.c_str()); return NULL; @@ -92,7 +86,7 @@ // get manager for given event id manager_base *event_type::get_manager (const u_int8 & id) { - if (id < Types.size() && Types[id] != NULL) return Types[id]->manager (); + if (id < Types().size() && Types()[id] != NULL) return Types()[id]->manager (); fprintf (stderr, "event_type::get_manager: event id '%i' not registered!\n", id); return NULL; @@ -103,4 +97,18 @@ Id = id; Manager = manager; InstanciateEvent = creator; +} + +// Types of events registered with the event subsystem by name +std::hash_map& event_type::NamedTypes () +{ + static std::hash_map *NamedTypes = new std::hash_map(); + return *NamedTypes; +} + +// Types of events by id +std::vector& event_type::Types () +{ + static std::vector *Types = new std::vector(); + return *Types; } Index: src/event/types.h =================================================================== RCS file: /cvsroot/adonthell/adonthell/src/event/types.h,v retrieving revision 1.2 diff -u -r1.2 types.h --- src/event/types.h 14 Aug 2005 16:51:20 -0000 1.2 +++ src/event/types.h 10 Sep 2005 23:24:43 -0000 @@ -139,10 +139,10 @@ new_event InstanciateEvent; /// Types of events registered with the event subsystem by name - static std::hash_map NamedTypes; + static std::hash_map& NamedTypes (); /// Types of events by id - static std::vector Types; + static std::vector& Types (); }; #ifndef SWIG