Switch ConCmdManager off KTrie (bug 5884 part 14, r=ds).
This commit is contained in:
parent
d5177fdc74
commit
bc51c3e5b1
@ -1,5 +1,5 @@
|
||||
/**
|
||||
* vim: set ts=4 :
|
||||
* vim: set ts=4 sw=4 tw=99 noet :
|
||||
* =============================================================================
|
||||
* SourceMod
|
||||
* Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved.
|
||||
@ -62,15 +62,11 @@ void AddToPlCmdList(CmdList *pList, const PlCmdInfo &info);
|
||||
|
||||
ConCmdManager::ConCmdManager() : m_Strings(1024)
|
||||
{
|
||||
m_pCmds = sm_trie_create();
|
||||
m_pCmdGrps = sm_trie_create();
|
||||
m_CmdClient = 0;
|
||||
}
|
||||
|
||||
ConCmdManager::~ConCmdManager()
|
||||
{
|
||||
sm_trie_destroy(m_pCmds);
|
||||
sm_trie_destroy(m_pCmdGrps);
|
||||
}
|
||||
|
||||
void ConCmdManager::OnSourceModAllInitialized()
|
||||
@ -93,10 +89,8 @@ void ConCmdManager::OnUnlinkConCommandBase(ConCommandBase *pBase, const char *na
|
||||
/* Whoa, first get its information struct */
|
||||
ConCmdInfo *pInfo;
|
||||
|
||||
if (!sm_trie_retrieve(m_pCmds, name, (void **)&pInfo))
|
||||
{
|
||||
if (!m_Cmds.retrieve(name, &pInfo))
|
||||
return;
|
||||
}
|
||||
|
||||
RemoveConCmds(pInfo->srvhooks);
|
||||
RemoveConCmds(pInfo->conhooks);
|
||||
@ -235,7 +229,7 @@ void ConCmdManager::SetCommandClient(int client)
|
||||
ConCmdInfo *ConCmdManager::FindInTrie(const char *name)
|
||||
{
|
||||
ConCmdInfo *pInfo;
|
||||
if (!sm_trie_retrieve(m_pCmds, name, (void **)&pInfo))
|
||||
if (!m_Cmds.retrieve(name, &pInfo))
|
||||
return NULL;
|
||||
return pInfo;
|
||||
}
|
||||
@ -595,16 +589,11 @@ bool ConCmdManager::AddAdminCommand(IPluginFunction *pFunction,
|
||||
}
|
||||
pHook->pAdmin = pAdmin;
|
||||
|
||||
void *object;
|
||||
int grpid;
|
||||
if (!sm_trie_retrieve(m_pCmdGrps, group, (void **)&object))
|
||||
if (!m_CmdGrps.retrieve(group, &grpid))
|
||||
{
|
||||
grpid = m_Strings.AddString(group);
|
||||
sm_trie_insert(m_pCmdGrps, group, (void *)grpid);
|
||||
}
|
||||
else
|
||||
{
|
||||
grpid = (int)object;
|
||||
m_CmdGrps.insert(group, grpid);
|
||||
}
|
||||
|
||||
pAdmin->cmdGrpId = grpid;
|
||||
@ -754,10 +743,8 @@ void ConCmdManager::UpdateAdminCmdFlags(const char *cmd, OverrideType type, Flag
|
||||
|
||||
if (type == Override_Command)
|
||||
{
|
||||
if (!sm_trie_retrieve(m_pCmds, cmd, (void **)&pInfo))
|
||||
{
|
||||
if (!m_Cmds.retrieve(cmd, &pInfo))
|
||||
return;
|
||||
}
|
||||
|
||||
List<CmdHook *>::iterator iter;
|
||||
CmdHook *pHook;
|
||||
@ -779,12 +766,9 @@ void ConCmdManager::UpdateAdminCmdFlags(const char *cmd, OverrideType type, Flag
|
||||
}
|
||||
else if (type == Override_CommandGroup)
|
||||
{
|
||||
void *object;
|
||||
if (!sm_trie_retrieve(m_pCmdGrps, cmd, &object))
|
||||
{
|
||||
int grpid;
|
||||
if (!m_CmdGrps.retrieve(cmd, &grpid))
|
||||
return;
|
||||
}
|
||||
int grpid = (int)object;
|
||||
|
||||
/* This is bad :( loop through all commands */
|
||||
List<ConCmdInfo *>::iterator iter;
|
||||
@ -815,7 +799,7 @@ void ConCmdManager::UpdateAdminCmdFlags(const char *cmd, OverrideType type, Flag
|
||||
void ConCmdManager::RemoveConCmd(ConCmdInfo *info, const char *name, bool is_read_safe, bool untrack)
|
||||
{
|
||||
/* Remove from the trie */
|
||||
sm_trie_delete(m_pCmds, name);
|
||||
m_Cmds.remove(name);
|
||||
|
||||
/* Remove console-specific information
|
||||
* This should always be true as of right now
|
||||
@ -856,11 +840,8 @@ void ConCmdManager::RemoveConCmd(ConCmdInfo *info, const char *name, bool is_rea
|
||||
bool ConCmdManager::LookForSourceModCommand(const char *cmd)
|
||||
{
|
||||
ConCmdInfo *pInfo;
|
||||
|
||||
if (!sm_trie_retrieve(m_pCmds, cmd, (void **)&pInfo))
|
||||
{
|
||||
if (!m_Cmds.retrieve(cmd, &pInfo))
|
||||
return false;
|
||||
}
|
||||
|
||||
return pInfo->sourceMod && (pInfo->conhooks.size() > 0);
|
||||
}
|
||||
@ -868,21 +849,17 @@ bool ConCmdManager::LookForSourceModCommand(const char *cmd)
|
||||
bool ConCmdManager::LookForCommandAdminFlags(const char *cmd, FlagBits *pFlags)
|
||||
{
|
||||
ConCmdInfo *pInfo;
|
||||
|
||||
if (!sm_trie_retrieve(m_pCmds, cmd, (void **)&pInfo))
|
||||
{
|
||||
if (!m_Cmds.retrieve(cmd, &pInfo))
|
||||
return false;
|
||||
}
|
||||
|
||||
*pFlags = pInfo->admin.eflags;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
ConCmdInfo *ConCmdManager::AddOrFindCommand(const char *name, const char *description, int flags)
|
||||
{
|
||||
ConCmdInfo *pInfo;
|
||||
if (!sm_trie_retrieve(m_pCmds, name, (void **)&pInfo))
|
||||
if (!m_Cmds.retrieve(name, &pInfo))
|
||||
{
|
||||
ConCmdList::iterator item = FindInList(name);
|
||||
if (item != m_CmdList.end())
|
||||
@ -914,7 +891,7 @@ ConCmdInfo *ConCmdManager::AddOrFindCommand(const char *name, const char *descri
|
||||
|
||||
pInfo->pCmd = pCmd;
|
||||
|
||||
sm_trie_insert(m_pCmds, name, pInfo);
|
||||
m_Cmds.insert(name, pInfo);
|
||||
AddToCmdList(pInfo);
|
||||
}
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
/**
|
||||
* vim: set ts=4 :
|
||||
* vim: set ts=4 sw=4 tw=99 noet :
|
||||
* =============================================================================
|
||||
* SourceMod
|
||||
* Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved.
|
||||
@ -35,13 +35,14 @@
|
||||
#include "sm_globals.h"
|
||||
#include "sourcemm_api.h"
|
||||
#include "ForwardSys.h"
|
||||
#include "sm_trie.h"
|
||||
#include "sm_memtable.h"
|
||||
#include <sh_list.h>
|
||||
#include <sh_string.h>
|
||||
#include <IRootConsoleMenu.h>
|
||||
#include <IAdminSystem.h>
|
||||
#include "concmd_cleaner.h"
|
||||
#include <sm_stringhashmap.h>
|
||||
#include <am-utility.h>
|
||||
|
||||
using namespace SourceHook;
|
||||
|
||||
@ -157,8 +158,8 @@ public:
|
||||
return m_CmdList;
|
||||
}
|
||||
private:
|
||||
Trie *m_pCmds; /* command lookup */
|
||||
Trie *m_pCmdGrps; /* command group lookup */
|
||||
StringHashMap<ConCmdInfo *> m_Cmds; /* command lookup */
|
||||
StringHashMap<int> m_CmdGrps; /* command group lookup */
|
||||
ConCmdList m_CmdList; /* command list */
|
||||
int m_CmdClient; /* current client */
|
||||
BaseStringTable m_Strings; /* string table */
|
||||
|
Loading…
Reference in New Issue
Block a user