From d5177fdc74b4a00a72c4652609986cea81a3aa78 Mon Sep 17 00:00:00 2001 From: David Anderson Date: Sun, 25 Aug 2013 12:17:26 -0700 Subject: [PATCH] Switch EventManager off KTrie (bug 5884 part 13, r=ds). --- core/EventManager.cpp | 16 ++++++---------- core/EventManager.h | 11 ++++++++--- 2 files changed, 14 insertions(+), 13 deletions(-) diff --git a/core/EventManager.cpp b/core/EventManager.cpp index 7625e005..7dd9b5ac 100644 --- a/core/EventManager.cpp +++ b/core/EventManager.cpp @@ -57,14 +57,10 @@ public: EventManager::EventManager() : m_EventType(0) { - /* Create an event lookup trie */ - m_EventHooks = sm_trie_create(); } EventManager::~EventManager() { - sm_trie_destroy(m_EventHooks); - /* Free memory used by EventInfo structs if any */ CStack::iterator iter; for (iter = m_FreeEvents.begin(); iter != m_FreeEvents.end(); iter++) @@ -183,7 +179,7 @@ EventHookError EventManager::HookEvent(const char *name, IPluginFunction *pFunct } /* If a hook structure does not exist... */ - if (!sm_trie_retrieve(m_EventHooks, name, (void **)&pHook)) + if (!m_EventHooks.retrieve(name, &pHook)) { EventHookList *pHookList; IPlugin *plugin = scripts->FindPluginByContext(pFunction->GetParentContext()->GetContext()); @@ -221,7 +217,7 @@ EventHookError EventManager::HookEvent(const char *name, IPluginFunction *pFunct /* Add hook structure to hook lists */ pHookList->push_back(pHook); - sm_trie_insert(m_EventHooks, name, pHook); + m_EventHooks.insert(name, pHook); return EventHookErr_Okay; } @@ -267,7 +263,7 @@ EventHookError EventManager::UnhookEvent(const char *name, IPluginFunction *pFun IChangeableForward **pEventForward; /* If hook does not exist at all */ - if (!sm_trie_retrieve(m_EventHooks, name, (void **)&pHook)) + if (!m_EventHooks.retrieve(name, &pHook)) { return EventHookErr_NotActive; } @@ -317,7 +313,7 @@ EventHookError EventManager::UnhookEvent(const char *name, IPluginFunction *pFun pHookList->remove(pHook); /* Delete entry in trie */ - sm_trie_delete(m_EventHooks, name); + m_EventHooks.remove(name); /* Free the cached name */ delete pHook->name; @@ -396,7 +392,7 @@ bool EventManager::OnFireEvent(IGameEvent *pEvent, bool bDontBroadcast) name = pEvent->GetName(); - if (sm_trie_retrieve(m_EventHooks, name, reinterpret_cast(&pHook))) + if (m_EventHooks.retrieve(name, &pHook)) { /* Push the event onto the event stack. The reference count is increased to make sure * the structure is not garbage collected in between now and the post hook. @@ -503,7 +499,7 @@ bool EventManager::OnFireEvent_Post(IGameEvent *pEvent, bool bDontBroadcast) { assert(pHook->pPostHook == NULL); assert(pHook->pPreHook == NULL); - sm_trie_delete(m_EventHooks, pHook->name); + m_EventHooks.remove(pHook->name); delete pHook->name; delete pHook; } diff --git a/core/EventManager.h b/core/EventManager.h index 4a0b86bc..dc086e63 100644 --- a/core/EventManager.h +++ b/core/EventManager.h @@ -1,5 +1,5 @@ /** - * vim: set ts=4 : + * vim: set ts=4 sw=4 tw=99 noet : * ============================================================================= * SourceMod * Copyright (C) 2004-2010 AlliedModders LLC. All rights reserved. @@ -34,7 +34,7 @@ #include "sm_globals.h" #include "sourcemm_api.h" -#include "sm_trie.h" +#include #include #include #include @@ -70,6 +70,11 @@ struct EventHook bool postCopy; unsigned int refCount; char *name; + + static inline bool matches(const char *name, const EventHook *hook) + { + return strcmp(name, hook->name) == 0; + } }; enum EventHookMode @@ -127,7 +132,7 @@ private: // IGameEventManager2 hooks bool OnFireEvent_Post(IGameEvent *pEvent, bool bDontBroadcast); private: HandleType_t m_EventType; - Trie *m_EventHooks; + NameHashSet m_EventHooks; CStack m_FreeEvents; CStack m_EventStack; CStack m_EventCopies;