24 auto& priorityMap = listeners[type];
25 for (
auto& p : priorityMap) {
27 assert(p.second != &listener); (void)p;
29 priorityMap.insert(PriorityMap::value_type(priority, &listener));
36 auto& priorityMap = listeners[type];
37 auto it = find_if(priorityMap.begin(), priorityMap.end(),
38 [&](PriorityMap::value_type v) {
return v.second == &listener; });
39 assert(it != priorityMap.end());
40 priorityMap.erase(it);
53 if (!listeners[event->getType()].empty()) {
54 scheduledEvents.push_back(event);
68 auto it = listeners.find(type);
69 if (it == listeners.end())
return false;
71 for (
auto& p : it->second) {
72 if (p.second == listener) {
91 while (!scheduledEvents.empty()) {
92 EventQueue eventsCopy;
93 swap(eventsCopy, scheduledEvents);
95 for (
auto& event : eventsCopy) {
96 auto type =
event->getType();
97 auto priorityMapCopy = listeners[type];
99 unsigned allowPriorities = unsigned(-1);
100 for (
auto& p : priorityMapCopy) {
103 if (!isRegistered(type, p.second))
continue;
105 unsigned currentPriority = p.first;
106 if (!(currentPriority & allowPriorities))
continue;
108 unsigned maskPriorities = p.second->signalEvent(event);
110 assert(maskPriorities < currentPriority);
111 allowPriorities &= ~maskPriorities;