# UNDF: UNDF-2026-000000993 --- a/include/WorldEventManager.h +++ b/include/WorldEventManager.h @@ -24,8 +24,8 @@ #include "common.h" // System headers +#include #include -#include #include // Common headers @@ -48,22 +48,27 @@ plugin->Event(eventData); } - std::vector HandledEvents; + std::bitset handledEventBits; bool HasEvent( bz_eEventType evt) { - return std::find(HandledEvents.begin(),HandledEvents.end(),evt) != HandledEvents.end(); + return (evt >= 0 && evt < bz_eLastEvent) && handledEventBits.test(evt); } void AddEvent( bz_eEventType evt ) { - if (std::find(HandledEvents.begin(),HandledEvents.end(),evt) == HandledEvents.end()) - HandledEvents.push_back(evt); + if (evt >= 0 && evt < bz_eLastEvent) + handledEventBits.set(evt); } void RemoveEvent( bz_eEventType evt ) { - std::vector::iterator itr = std::find(HandledEvents.begin(),HandledEvents.end(),evt); - - if ( itr!= HandledEvents.end()) - HandledEvents.erase(itr); + if (evt >= 0 && evt < bz_eLastEvent) + handledEventBits.reset(evt); + } + + bool HasNoEvents() const + { + return handledEventBits.none(); } }; --- a/src/bzfs/WorldEventManager.cxx +++ b/src/bzfs/WorldEventManager.cxx @@ -147,7 +147,7 @@ bz_EventHandler *handler = HandlerMap[plugin]; worldEventManager.removeEvent(eventType,handler); - if (handler->HandledEvents.empty()) + if (handler->HasNoEvents()) worldEventManager.removeHandler(handler); return true;