Merge pull request #11813 from lioncash/insert

PPCSymbolDB: Use emplace() where applicable
This commit is contained in:
Admiral H. Curtiss
2023-05-09 18:48:06 +02:00
committed by GitHub
2 changed files with 16 additions and 14 deletions

View File

@ -37,6 +37,9 @@ struct Symbol
Data, Data,
}; };
Symbol() = default;
explicit Symbol(const std::string& name) { Rename(name); }
void Rename(const std::string& symbol_name); void Rename(const std::string& symbol_name);
std::string name; std::string name;

View File

@ -44,8 +44,8 @@ Common::Symbol* PPCSymbolDB::AddFunction(const Core::CPUThreadGuard& guard, u32
if (!PPCAnalyst::AnalyzeFunction(guard, start_addr, symbol)) if (!PPCAnalyst::AnalyzeFunction(guard, start_addr, symbol))
return nullptr; return nullptr;
m_functions[start_addr] = std::move(symbol); const auto insert = m_functions.emplace(start_addr, std::move(symbol));
Common::Symbol* ptr = &m_functions[start_addr]; Common::Symbol* ptr = &insert.first->second;
ptr->type = Common::Symbol::Type::Function; ptr->type = Common::Symbol::Type::Function;
m_checksum_to_function[ptr->hash].insert(ptr); m_checksum_to_function[ptr->hash].insert(ptr);
return ptr; return ptr;
@ -67,27 +67,26 @@ void PPCSymbolDB::AddKnownSymbol(const Core::CPUThreadGuard& guard, u32 startAdd
else else
{ {
// new symbol. run analyze. // new symbol. run analyze.
Common::Symbol tf; auto& new_symbol = m_functions.emplace(startAddr, name).first->second;
tf.Rename(name); new_symbol.type = type;
tf.type = type; new_symbol.address = startAddr;
tf.address = startAddr;
if (tf.type == Common::Symbol::Type::Function) if (new_symbol.type == Common::Symbol::Type::Function)
{ {
PPCAnalyst::AnalyzeFunction(guard, startAddr, tf, size); PPCAnalyst::AnalyzeFunction(guard, startAddr, new_symbol, size);
// Do not truncate symbol when a size is expected // Do not truncate symbol when a size is expected
if (size != 0 && tf.size != size) if (size != 0 && new_symbol.size != size)
{ {
WARN_LOG_FMT(SYMBOLS, "Analysed symbol ({}) size mismatch, {} expected but {} computed", WARN_LOG_FMT(SYMBOLS, "Analysed symbol ({}) size mismatch, {} expected but {} computed",
name, size, tf.size); name, size, new_symbol.size);
tf.size = size; new_symbol.size = size;
} }
m_checksum_to_function[tf.hash].insert(&m_functions[startAddr]); m_checksum_to_function[new_symbol.hash].insert(&new_symbol);
} }
else else
{ {
tf.size = size; new_symbol.size = size;
} }
m_functions[startAddr] = tf;
} }
} }