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++)
|
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);
|
std::println("Recompiling functions... {}%", static_cast<float>(funcIdx) / functions.size() * 100.0f);
|
||||||
|
|
||||||
auto& fn = functions[funcIdx];
|
auto& fn = functions[funcIdx];
|
||||||
|
@ -7,25 +7,25 @@ class SymbolTable : public std::multiset<Symbol, SymbolComparer>
|
|||||||
public:
|
public:
|
||||||
const_iterator find(size_t address) const
|
const_iterator find(size_t address) const
|
||||||
{
|
{
|
||||||
auto iter = std::multiset<Symbol, SymbolComparer>::find(address);
|
auto [beginIt, endIt] = equal_range(address);
|
||||||
if (iter == end())
|
if (beginIt == endIt)
|
||||||
{
|
{
|
||||||
return iter;
|
return end();
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t closest{ address - iter->address };
|
size_t closest{ address - beginIt->address };
|
||||||
auto match = end();
|
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;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
const size_t distance = address - iter->address;
|
const size_t distance = address - it->address;
|
||||||
if (distance <= closest)
|
if (distance <= closest)
|
||||||
{
|
{
|
||||||
match = iter;
|
match = it;
|
||||||
closest = distance;
|
closest = distance;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -35,25 +35,25 @@ public:
|
|||||||
|
|
||||||
iterator find(size_t address)
|
iterator find(size_t address)
|
||||||
{
|
{
|
||||||
auto iter = std::multiset<Symbol, SymbolComparer>::find(address);
|
auto [beginIt, endIt] = equal_range(address);
|
||||||
if (iter == end())
|
if (beginIt == endIt)
|
||||||
{
|
{
|
||||||
return iter;
|
return end();
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t closest{ address - iter->address };
|
size_t closest{ address - beginIt->address };
|
||||||
auto match = end();
|
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;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
const size_t distance = address - iter->address;
|
const size_t distance = address - it->address;
|
||||||
if (distance <= closest)
|
if (distance <= closest)
|
||||||
{
|
{
|
||||||
match = iter;
|
match = it;
|
||||||
closest = distance;
|
closest = distance;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user