mirror of
https://github.com/hedge-dev/XenonRecomp.git
synced 2025-06-05 16:52:07 +00:00
Fix symbol find function.
This commit is contained in:
parent
fc1efc5a37
commit
df78800c8d
@ -113,7 +113,7 @@ int main()
|
||||
|
||||
for (size_t funcIdx = 0; funcIdx < functions.size(); funcIdx++)
|
||||
{
|
||||
if ((funcIdx % 100) == 0)
|
||||
if ((funcIdx % 1000) == 0)
|
||||
std::println("Recompiling functions... {}%", static_cast<float>(funcIdx) / functions.size() * 100.0f);
|
||||
|
||||
auto& fn = functions[funcIdx];
|
||||
|
@ -7,25 +7,25 @@ class SymbolTable : public std::multiset<Symbol, SymbolComparer>
|
||||
public:
|
||||
const_iterator find(size_t address) const
|
||||
{
|
||||
auto iter = std::multiset<Symbol, SymbolComparer>::find(address);
|
||||
if (iter == end())
|
||||
auto [beginIt, endIt] = equal_range(address);
|
||||
if (beginIt == endIt)
|
||||
{
|
||||
return iter;
|
||||
return end();
|
||||
}
|
||||
|
||||
size_t closest{ address - iter->address };
|
||||
size_t closest{ address - beginIt->address };
|
||||
auto match = end();
|
||||
for (; iter != end(); ++iter)
|
||||
for (auto it = beginIt; it != endIt; ++it)
|
||||
{
|
||||
if (address < iter->address || address >= iter->address + iter->size)
|
||||
if (address < it->address || address >= it->address + it->size)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
const size_t distance = address - iter->address;
|
||||
const size_t distance = address - it->address;
|
||||
if (distance <= closest)
|
||||
{
|
||||
match = iter;
|
||||
match = it;
|
||||
closest = distance;
|
||||
}
|
||||
}
|
||||
@ -35,25 +35,25 @@ public:
|
||||
|
||||
iterator find(size_t address)
|
||||
{
|
||||
auto iter = std::multiset<Symbol, SymbolComparer>::find(address);
|
||||
if (iter == end())
|
||||
auto [beginIt, endIt] = equal_range(address);
|
||||
if (beginIt == endIt)
|
||||
{
|
||||
return iter;
|
||||
return end();
|
||||
}
|
||||
|
||||
size_t closest{ address - iter->address };
|
||||
size_t closest{ address - beginIt->address };
|
||||
auto match = end();
|
||||
for (; iter != end(); ++iter)
|
||||
for (auto it = beginIt; it != endIt; ++it)
|
||||
{
|
||||
if (address < iter->address || address >= iter->address + iter->size)
|
||||
if (address < it->address || address >= it->address + it->size)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
const size_t distance = address - iter->address;
|
||||
const size_t distance = address - it->address;
|
||||
if (distance <= closest)
|
||||
{
|
||||
match = iter;
|
||||
match = it;
|
||||
closest = distance;
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user