SymbolDB: Use set to map hash with symbols

This commit is contained in:
Sepalani 2016-10-10 23:35:33 +01:00
parent 7e974f1064
commit 8d812db9ad
3 changed files with 7 additions and 5 deletions

View File

@ -65,7 +65,7 @@ Symbol* SymbolDB::GetSymbolFromHash(u32 hash)
{
XFuncPtrMap::iterator iter = checksumToFunction.find(hash);
if (iter != checksumToFunction.end())
return iter->second;
return *iter->second.begin();
else
return nullptr;
}
@ -76,7 +76,8 @@ std::vector<Symbol*> SymbolDB::GetSymbolsFromHash(u32 hash)
for (const auto& iter : checksumToFunction)
if (iter.first == hash)
symbols.push_back(iter.second);
for (const auto& symbol : iter.second)
symbols.push_back(symbol);
return symbols;
}

View File

@ -8,6 +8,7 @@
#pragma once
#include <map>
#include <set>
#include <string>
#include <utility>
#include <vector>
@ -57,7 +58,7 @@ class SymbolDB
{
public:
typedef std::map<u32, Symbol> XFuncMap;
typedef std::map<u32, Symbol*> XFuncPtrMap;
typedef std::map<u32, std::set<Symbol*>> XFuncPtrMap;
protected:
XFuncMap functions;

View File

@ -57,7 +57,7 @@ Symbol* PPCSymbolDB::AddFunction(u32 startAddr)
// LOG(OSHLE, "Symbol found at %08x", startAddr);
functions[startAddr] = tempFunc;
tempFunc.type = Symbol::Type::Function;
checksumToFunction[tempFunc.hash] = &(functions[startAddr]);
checksumToFunction[tempFunc.hash].insert(&functions[startAddr]);
return &functions[startAddr];
}
}
@ -86,7 +86,7 @@ void PPCSymbolDB::AddKnownSymbol(u32 startAddr, u32 size, const std::string& nam
if (tf.type == Symbol::Type::Function)
{
PPCAnalyst::AnalyzeFunction(startAddr, tf, size);
checksumToFunction[tf.hash] = &(functions[startAddr]);
checksumToFunction[tf.hash].insert(&functions[startAddr]);
tf.function_name = GetStrippedFunctionName(name);
}
tf.size = size;