61 lines
1.7 KiB
Diff
61 lines
1.7 KiB
Diff
# UNDF: UNDF-2026-000000993
|
|
--- a/include/WorldEventManager.h
|
|
+++ b/include/WorldEventManager.h
|
|
@@ -24,8 +24,8 @@
|
|
#include "common.h"
|
|
|
|
// System headers
|
|
+#include <bitset>
|
|
#include <map>
|
|
-#include <vector>
|
|
#include <algorithm>
|
|
|
|
// Common headers
|
|
@@ -48,22 +48,27 @@
|
|
plugin->Event(eventData);
|
|
}
|
|
|
|
- std::vector<bz_eEventType> HandledEvents;
|
|
+ std::bitset<bz_eLastEvent> 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<bz_eEventType>::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;
|