gameconfs can now inherit properly with a new trie replace function
--HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401063
This commit is contained in:
parent
c6a147346f
commit
a2617e5644
@ -58,3 +58,8 @@ void BaseTrie::Destroy()
|
||||
{
|
||||
delete this;
|
||||
}
|
||||
|
||||
bool BaseTrie::Replace(const char *key, void *value)
|
||||
{
|
||||
return sm_trie_replace(m_pTrie, key, value);
|
||||
}
|
||||
|
@ -10,6 +10,7 @@ public:
|
||||
BaseTrie();
|
||||
virtual ~BaseTrie();
|
||||
virtual bool Insert(const char *key, void *value);
|
||||
virtual bool Replace(const char *key, void *value);
|
||||
virtual bool Retrieve(const char *key, void **value);
|
||||
virtual bool Delete(const char *key);
|
||||
virtual void Clear();
|
||||
|
@ -190,11 +190,11 @@ SMCParseResult CGameConfig::ReadSMC_KeyValue(const char *key, const char *value,
|
||||
strncopy(m_prop, value, sizeof(m_prop));
|
||||
} else if (strcmp(key, PLATFORM_NAME) == 0) {
|
||||
int val = atoi(value);
|
||||
sm_trie_insert(m_pOffsets, m_offset, (void *)val);
|
||||
sm_trie_replace(m_pOffsets, m_offset, (void *)val);
|
||||
}
|
||||
} else if (m_ParseState == PSTATE_GAMEDEFS_KEYS) {
|
||||
int id = m_pStrings->AddString(value);
|
||||
sm_trie_insert(m_pKeys, key, (void *)id);
|
||||
sm_trie_replace(m_pKeys, key, (void *)id);
|
||||
} else if (m_ParseState == PSTATE_GAMEDEFS_SUPPORTED) {
|
||||
if (strcmp(key, "game") == 0
|
||||
&& strcmp(value, g_mod) == 0)
|
||||
@ -249,8 +249,8 @@ SMCParseResult CGameConfig::ReadSMC_LeavingSection()
|
||||
if (pProp)
|
||||
{
|
||||
int val = pProp->GetOffset();
|
||||
sm_trie_insert(m_pOffsets, m_offset, (void *)val);
|
||||
sm_trie_insert(m_pProps, m_offset, pProp);
|
||||
sm_trie_replace(m_pOffsets, m_offset, (void *)val);
|
||||
sm_trie_replace(m_pProps, m_offset, pProp);
|
||||
} else {
|
||||
/* Check if it's a non-default game and no offsets exist */
|
||||
if (((strcmp(m_mod, "*") != 0) && strcmp(m_mod, "#default") != 0)
|
||||
@ -383,7 +383,7 @@ SMCParseResult CGameConfig::ReadSMC_LeavingSection()
|
||||
#if defined PLATFORM_LINUX
|
||||
skip_find:
|
||||
#endif
|
||||
sm_trie_insert(m_pSigs, m_offset, final_addr);
|
||||
sm_trie_replace(m_pSigs, m_offset, final_addr);
|
||||
m_ParseState = PSTATE_GAMEDEFS_SIGNATURES;
|
||||
|
||||
break;
|
||||
|
@ -388,7 +388,7 @@ bool sm_trie_retrieve(Trie *trie, const char *key, void **value)
|
||||
return true;
|
||||
}
|
||||
|
||||
bool sm_trie_insert(Trie *trie, const char *key, void *value)
|
||||
bool sm_trie_add(Trie *trie, const char *key, void *value, bool replace_allowed)
|
||||
{
|
||||
unsigned int lastidx = 1; /* the last node index */
|
||||
unsigned int curidx; /* current node index */
|
||||
@ -803,7 +803,7 @@ bool sm_trie_insert(Trie *trie, const char *key, void *value)
|
||||
*/
|
||||
assert(node->mode == Node_Arc);
|
||||
|
||||
if (!node->valset)
|
||||
if (!node->valset || replace_allowed)
|
||||
{
|
||||
/* Insert is only possible if we have no production */
|
||||
node->valset = true;
|
||||
@ -813,3 +813,13 @@ bool sm_trie_insert(Trie *trie, const char *key, void *value)
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
bool sm_trie_insert(Trie *trie, const char *key, void *value)
|
||||
{
|
||||
return sm_trie_add(trie, key, value, false);
|
||||
}
|
||||
|
||||
bool sm_trie_replace(Trie *trie, const char *key, void *value)
|
||||
{
|
||||
return sm_trie_add(trie, key, value, true);
|
||||
}
|
||||
|
@ -20,6 +20,7 @@ struct Trie;
|
||||
Trie *sm_trie_create();
|
||||
void sm_trie_destroy(Trie *trie);
|
||||
bool sm_trie_insert(Trie *trie, const char *key, void *value);
|
||||
bool sm_trie_replace(Trie *trie, const char *key, void *value);
|
||||
bool sm_trie_retrieve(Trie *trie, const char *key, void **value);
|
||||
bool sm_trie_delete(Trie *trie, const char *key);
|
||||
void sm_trie_clear(Trie *trie);
|
||||
|
@ -4,7 +4,7 @@
|
||||
#include <IShareSys.h>
|
||||
|
||||
#define SMINTERFACE_ADTFACTORY_NAME "IADTFactory"
|
||||
#define SMINTERFACE_ADTFACTORY_VERSION 1
|
||||
#define SMINTERFACE_ADTFACTORY_VERSION 2
|
||||
|
||||
/**
|
||||
* @file IADTFactory.h
|
||||
@ -55,6 +55,16 @@ namespace SourceMod
|
||||
* memory.
|
||||
*/
|
||||
virtual void Destroy() =0;
|
||||
|
||||
/**
|
||||
* @brief Inserts a key/value pair, replacing an old inserted
|
||||
* value if it already exists.
|
||||
*
|
||||
* @param key Key string (null terminated).
|
||||
* @param value Value pointer (may be anything).
|
||||
* @return True on success, false on failure.
|
||||
*/
|
||||
virtual bool Replace(const char *key, void *value) =0;
|
||||
};
|
||||
|
||||
class IADTFactory : public SMInterface
|
||||
|
Loading…
Reference in New Issue
Block a user