// // Manager::getListenerList - Chapter 10, page 300 // // Get the list of listeners associated with a specific event // type // ListenerList Manager::GetListenerList( TypeId const & eventType ) const { // invalid event type, so sad if ( ! VValidateType( eventType ) ) return ListenerList(); EventListenerMap::const_iterator itListeners = m_registry.find( eventType.Value() ); // no listerners currently for this event type, so sad if ( itListeners == m_registry.end() ) return ListenerList(); EventListenerTable const & table = itListeners->second; // there was, but is not now, any listerners currently for // this event type, so sad if ( table.size() == 0 ) return ListenerList(); ListenerList result; result.reserve( table.size() ); for ( EventListenerTable::const_iterator it = table.begin(), end = table.end(); it != end; it++ ) { result.push_back( *it ); } return result; }
void EventManager::addListener(GameObject *listener, EventID eventID) { ListenerMap::iterator mapIter = mListenerMap.find(eventID); // listener list for eventID is empty, need create first if (mapIter == mListenerMap.end()) { ListenerList *newList = new ListenerList; mListenerMap.insert(ListenerMap::value_type(eventID, newList)); newList->push_back(listener); } else { (mapIter->second)->push_back(listener); } }