java-topology/defects/bzflag-0001/patch/bzflag-0001.patch

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;