1.1 --- a/core/logic/GameConfigs.cpp Sun Aug 25 01:42:15 2013 -0700
1.2 +++ b/core/logic/GameConfigs.cpp Sun Aug 25 01:42:16 2013 -0700
1.3 @@ -119,7 +119,6 @@
1.4 CGameConfig::CGameConfig(const char *file, const char *engine)
1.5 {
1.6 strncopy(m_File, file, sizeof(m_File));
1.7 - m_pAddresses = new KTrie<AddressConf>();
1.8 m_pStrings = new BaseStringTable(512);
1.9
1.10 m_CustomLevel = 0;
1.11 @@ -212,13 +211,10 @@
1.12 }
1.13 else
1.14 {
1.15 - ITextListener_SMC **pListen = g_GameConfigs.m_customHandlers.retrieve(name);
1.16 -
1.17 - if (pListen != NULL)
1.18 + if (g_GameConfigs.m_customHandlers.retrieve(name, &m_CustomHandler))
1.19 {
1.20 m_CustomLevel = 0;
1.21 m_ParseState = PSTATE_GAMEDEFS_CUSTOM;
1.22 - m_CustomHandler = *pListen;
1.23 m_CustomHandler->ReadSMC_ParseStart();
1.24 break;
1.25 }
1.26 @@ -617,7 +613,7 @@
1.27 }
1.28
1.29 AddressConf addrConf(m_AddressSignature, sizeof(m_AddressSignature), m_AddressReadCount, m_AddressRead);
1.30 - m_pAddresses->replace(m_Address, addrConf);
1.31 + m_Addresses.replace(m_Address, addrConf);
1.32
1.33 break;
1.34 }
1.35 @@ -765,7 +761,7 @@
1.36 m_Offsets.clear();
1.37 m_Props.clear();
1.38 m_Keys.clear();
1.39 - m_pAddresses->clear();
1.40 + m_Addresses.clear();
1.41
1.42 char path[PLATFORM_MAX_PATH];
1.43
1.44 @@ -920,20 +916,15 @@
1.45
1.46 bool CGameConfig::GetOffset(const char *key, int *value)
1.47 {
1.48 - int *pvalue;
1.49 - if ((pvalue = m_Offsets.retrieve(key)) == NULL)
1.50 - return false;
1.51 -
1.52 - *value = *pvalue;
1.53 - return true;
1.54 + return m_Offsets.retrieve(key, value);
1.55 }
1.56
1.57 const char *CGameConfig::GetKeyValue(const char *key)
1.58 {
1.59 - int *pkey;
1.60 - if ((pkey = m_Keys.retrieve(key)) == NULL)
1.61 + int address;
1.62 + if (!m_Keys.retrieve(key, &address))
1.63 return NULL;
1.64 - return m_pStrings->GetString(*pkey);
1.65 + return m_pStrings->GetString(address);
1.66 }
1.67
1.68 //memory addresses below 0x10000 are automatically considered invalid for dereferencing
1.69 @@ -941,25 +932,25 @@
1.70
1.71 bool CGameConfig::GetAddress(const char *key, void **retaddr)
1.72 {
1.73 - AddressConf *addrConf;
1.74 -
1.75 - addrConf = m_pAddresses->retrieve(key);
1.76 - if (!addrConf)
1.77 + StringHashMap<AddressConf>::Result r = m_Addresses.find(key);
1.78 + if (!r.found())
1.79 {
1.80 *retaddr = NULL;
1.81 return false;
1.82 }
1.83
1.84 + AddressConf &addrConf = r->value;
1.85 +
1.86 void *addr;
1.87 - if (!GetMemSig(addrConf->signatureName, &addr))
1.88 + if (!GetMemSig(addrConf.signatureName, &addr))
1.89 {
1.90 *retaddr = NULL;
1.91 return false;
1.92 }
1.93
1.94 - for (int i = 0; i < addrConf->readCount; ++i)
1.95 + for (int i = 0; i < addrConf.readCount; ++i)
1.96 {
1.97 - int offset = addrConf->read[i];
1.98 + int offset = addrConf.read[i];
1.99
1.100 //NULLs in the middle of an indirection chain are bad, end NULL is ok
1.101 if (addr == NULL || reinterpret_cast<uintptr_t>(addr) < VALID_MINIMUM_MEMORY_ADDRESS)
1.102 @@ -1000,11 +991,7 @@
1.103
1.104 bool CGameConfig::GetMemSig(const char *key, void **addr)
1.105 {
1.106 - void **paddr;
1.107 - if ((paddr = m_Sigs.retrieve(key)) == NULL)
1.108 - return false;
1.109 - *addr = *paddr;
1.110 - return true;
1.111 + return m_Sigs.retrieve(key, addr);
1.112 }
1.113
1.114 GameConfigManager::GameConfigManager()
1.115 @@ -1074,7 +1061,6 @@
1.116 retval = pConfig->Reparse(error, maxlength);
1.117 }
1.118
1.119 - m_cfgs.push_back(pConfig);
1.120 m_Lookup.insert(file, pConfig);
1.121
1.122 *_pConfig = pConfig;
1.123 @@ -1108,22 +1094,16 @@
1.124 m_customHandlers.insert(sectionname, listener);
1.125 }
1.126
1.127 -void GameConfigManager::RemoveUserConfigHook(const char *sectionname, ITextListener_SMC *listener)
1.128 +void GameConfigManager::RemoveUserConfigHook(const char *sectionname, ITextListener_SMC *aListener)
1.129 {
1.130 - ITextListener_SMC **pListener = m_customHandlers.retrieve(sectionname);
1.131 -
1.132 - if (pListener == NULL)
1.133 - {
1.134 + ITextListener_SMC *listener;
1.135 + if (!m_customHandlers.retrieve(sectionname, &listener))
1.136 return;
1.137 - }
1.138
1.139 - if (*pListener != listener)
1.140 - {
1.141 + if (listener != aListener)
1.142 return;
1.143 - }
1.144
1.145 m_customHandlers.remove(sectionname);
1.146 -
1.147 return;
1.148 }
1.149