Switch TopMenus off KTrie (bug 5884 part 16, r=ds).
This commit is contained in:
parent
8e99b342a4
commit
51dc097266
@ -1,5 +1,5 @@
|
|||||||
/**
|
/**
|
||||||
* vim: set ts=4 :
|
* vim: set ts=4 sw=4 tw=99 noet :
|
||||||
* =============================================================================
|
* =============================================================================
|
||||||
* SourceMod TopMenus Extension
|
* SourceMod TopMenus Extension
|
||||||
* Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved.
|
* Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved.
|
||||||
@ -169,7 +169,7 @@ unsigned int TopMenu::AddToMenu2(const char *name,
|
|||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
else if (m_ObjLookup.retrieve(name) != NULL)
|
else if (m_ObjLookup.contains(name))
|
||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -483,13 +483,8 @@ void TopMenu::OnMenuSelect2(IBaseMenu *menu, int client, unsigned int item, unsi
|
|||||||
|
|
||||||
topmenu_object_t *obj;
|
topmenu_object_t *obj;
|
||||||
topmenu_player_t *pClient = &m_clients[client];
|
topmenu_player_t *pClient = &m_clients[client];
|
||||||
topmenu_object_t **pObject = m_ObjLookup.retrieve(item_name);
|
if (!m_ObjLookup.retrieve(item_name, &obj))
|
||||||
if (pObject == NULL)
|
|
||||||
{
|
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
|
|
||||||
obj = *pObject;
|
|
||||||
|
|
||||||
/* We now have the object... what do we do with it? */
|
/* We now have the object... what do we do with it? */
|
||||||
if (obj->type == TopMenuObject_Category)
|
if (obj->type == TopMenuObject_Category)
|
||||||
@ -532,13 +527,8 @@ void TopMenu::OnMenuDrawItem(IBaseMenu *menu, int client, unsigned int item, uns
|
|||||||
}
|
}
|
||||||
|
|
||||||
topmenu_object_t *obj;
|
topmenu_object_t *obj;
|
||||||
topmenu_object_t **pObject = m_ObjLookup.retrieve(item_name);
|
if (!m_ObjLookup.retrieve(item_name, &obj))
|
||||||
if (pObject == NULL)
|
|
||||||
{
|
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
|
|
||||||
obj = *pObject;
|
|
||||||
|
|
||||||
/* If the category has nothing to display, disable it. */
|
/* If the category has nothing to display, disable it. */
|
||||||
if (obj->type == TopMenuObject_Category)
|
if (obj->type == TopMenuObject_Category)
|
||||||
@ -583,13 +573,8 @@ unsigned int TopMenu::OnMenuDisplayItem(IBaseMenu *menu,
|
|||||||
}
|
}
|
||||||
|
|
||||||
topmenu_object_t *obj;
|
topmenu_object_t *obj;
|
||||||
topmenu_object_t **pObject = m_ObjLookup.retrieve(item_name);
|
if (!m_ObjLookup.retrieve(item_name, &obj))
|
||||||
if (pObject == NULL)
|
|
||||||
{
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
|
||||||
|
|
||||||
obj = *pObject;
|
|
||||||
|
|
||||||
/* Ask the object to render the text for this client */
|
/* Ask the object to render the text for this client */
|
||||||
char renderbuf[64];
|
char renderbuf[64];
|
||||||
@ -1134,17 +1119,12 @@ SMCResult TopMenu::ReadSMC_LeavingSection(const SMCStates *states)
|
|||||||
|
|
||||||
unsigned int TopMenu::FindCategory(const char *name)
|
unsigned int TopMenu::FindCategory(const char *name)
|
||||||
{
|
{
|
||||||
topmenu_object_t **p_obj = m_ObjLookup.retrieve(name);
|
topmenu_object_t *obj;
|
||||||
if (!p_obj)
|
if (!m_ObjLookup.retrieve(name, &obj))
|
||||||
{
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
|
||||||
|
|
||||||
topmenu_object_t *obj = *p_obj;
|
|
||||||
if (obj->type != TopMenuObject_Category)
|
if (obj->type != TopMenuObject_Category)
|
||||||
{
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
|
||||||
|
|
||||||
return obj->object_id;
|
return obj->object_id;
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/**
|
/**
|
||||||
* vim: set ts=4 :
|
* vim: set ts=4 sw=4 tw=99 noet :
|
||||||
* =============================================================================
|
* =============================================================================
|
||||||
* SourceMod TopMenus Extension
|
* SourceMod TopMenus Extension
|
||||||
* Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved.
|
* Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved.
|
||||||
@ -34,10 +34,10 @@
|
|||||||
|
|
||||||
#include <sh_list.h>
|
#include <sh_list.h>
|
||||||
#include <sh_vector.h>
|
#include <sh_vector.h>
|
||||||
#include <sm_trie_tpl.h>
|
|
||||||
#include <ITopMenus.h>
|
#include <ITopMenus.h>
|
||||||
#include "smsdk_ext.h"
|
#include "smsdk_ext.h"
|
||||||
#include "sm_memtable.h"
|
#include "sm_memtable.h"
|
||||||
|
#include <sm_namehashset.h>
|
||||||
|
|
||||||
using namespace SourceHook;
|
using namespace SourceHook;
|
||||||
using namespace SourceMod;
|
using namespace SourceMod;
|
||||||
@ -72,6 +72,11 @@ struct topmenu_object_t
|
|||||||
bool is_free; /** Free or not? */
|
bool is_free; /** Free or not? */
|
||||||
char info[255]; /** Info string */
|
char info[255]; /** Info string */
|
||||||
unsigned int cat_id; /** Set if a category */
|
unsigned int cat_id; /** Set if a category */
|
||||||
|
|
||||||
|
static inline bool matches(const char *name, const topmenu_object_t *topmenu)
|
||||||
|
{
|
||||||
|
return strcmp(name, topmenu->name) == 0;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
struct topmenu_category_t
|
struct topmenu_category_t
|
||||||
@ -173,7 +178,7 @@ private:
|
|||||||
CVector<unsigned int> m_UnsortedCats; /* Un-sorted categories */
|
CVector<unsigned int> m_UnsortedCats; /* Un-sorted categories */
|
||||||
CVector<topmenu_category_t *> m_Categories; /* Category array */
|
CVector<topmenu_category_t *> m_Categories; /* Category array */
|
||||||
CVector<topmenu_object_t *> m_Objects; /* Object array */
|
CVector<topmenu_object_t *> m_Objects; /* Object array */
|
||||||
KTrie<topmenu_object_t *> m_ObjLookup; /* Object lookup trie */
|
NameHashSet<topmenu_object_t *> m_ObjLookup; /* Object lookup trie */
|
||||||
unsigned int m_SerialNo; /* Serial number for updating */
|
unsigned int m_SerialNo; /* Serial number for updating */
|
||||||
ITopMenuObjectCallbacks *m_pTitle; /* Title callbacks */
|
ITopMenuObjectCallbacks *m_pTitle; /* Title callbacks */
|
||||||
int m_max_clients; /* Maximum number of clients */
|
int m_max_clients; /* Maximum number of clients */
|
||||||
|
@ -148,6 +148,11 @@ public:
|
|||||||
table_.clear();
|
table_.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
size_t mem_usage() const
|
||||||
|
{
|
||||||
|
return table_.estimateMemoryUse();
|
||||||
|
}
|
||||||
|
|
||||||
iterator iter()
|
iterator iter()
|
||||||
{
|
{
|
||||||
return iterator(&table_);
|
return iterator(&table_);
|
||||||
|
Loading…
Reference in New Issue
Block a user