Fix symbol find function.

This commit is contained in:
Skyth 2024-09-14 19:30:26 +03:00
parent fc1efc5a37
commit df78800c8d
2 changed files with 17 additions and 17 deletions

View File

@ -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];

View File

@ -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;
} }
} }