2
0
mirror of https://github.com/AxioDL/metaforce.git synced 2025-06-16 21:53:28 +00:00

CVarManager: Use insert_or_assign where applicable

Avoids the need to create an initial entry in the map which is then
overwritten with the value being assigned to it.
This commit is contained in:
Lioncash 2019-08-20 05:57:56 -04:00
parent 3795e0e72c
commit a1a18c6816

View File

@ -37,11 +37,13 @@ CVarManager::~CVarManager() {}
CVar* CVarManager::registerCVar(std::unique_ptr<CVar>&& cvar) { CVar* CVarManager::registerCVar(std::unique_ptr<CVar>&& cvar) {
std::string tmp(cvar->name()); std::string tmp(cvar->name());
athena::utility::tolower(tmp); athena::utility::tolower(tmp);
if (m_cvars.find(tmp) != m_cvars.end())
if (m_cvars.find(tmp) != m_cvars.end()) {
return nullptr; return nullptr;
}
CVar* ret = cvar.get(); CVar* ret = cvar.get();
m_cvars[tmp] = std::move(cvar); m_cvars.insert_or_assign(std::move(tmp), std::move(cvar));
return ret; return ret;
} }
@ -276,28 +278,31 @@ bool CVarManager::restartRequired() const {
void CVarManager::parseCommandLine(const std::vector<SystemString>& args) { void CVarManager::parseCommandLine(const std::vector<SystemString>& args) {
bool oldDeveloper = suppressDeveloper(); bool oldDeveloper = suppressDeveloper();
std::string developerName = com_developer->name().data(); std::string developerName(com_developer->name());
athena::utility::tolower(developerName); athena::utility::tolower(developerName);
for (const SystemString& arg : args) { for (const SystemString& arg : args) {
if (arg[0] == _SYS_STR('+')) { if (arg[0] != _SYS_STR('+')) {
std::string tmp = SystemUTF8Conv(arg).c_str(); continue;
}
std::smatch matches; const std::string tmp(SystemUTF8Conv(arg).str());
if (std::regex_match(tmp, matches, cmdLineRegex)) { std::smatch matches;
std::string cvarName = matches[1].str(); if (!std::regex_match(tmp, matches, cmdLineRegex)) {
std::string cvarValue = matches[2].str(); continue;
if (CVar* cv = findCVar(cvarName)) { }
cv->fromLiteralToType(cvarValue);
athena::utility::tolower(cvarName); std::string cvarName = matches[1].str();
if (developerName == cvarName) std::string cvarValue = matches[2].str();
/* Make sure we're not overriding developer mode when we restore */ if (CVar* cv = findCVar(cvarName)) {
oldDeveloper = com_developer->toBoolean(); cv->fromLiteralToType(cvarValue);
} else { athena::utility::tolower(cvarName);
/* Unable to find an existing CVar, let's defer for the time being 8 */ if (developerName == cvarName)
athena::utility::tolower(cvarName); /* Make sure we're not overriding developer mode when we restore */
m_deferedCVars[cvarName] = cvarValue; oldDeveloper = com_developer->toBoolean();
} } else {
} /* Unable to find an existing CVar, let's defer for the time being 8 */
athena::utility::tolower(cvarName);
m_deferedCVars.insert_or_assign(std::move(cvarName), std::move(cvarValue));
} }
} }