mirror of
https://github.com/hedge-dev/XenonRecomp.git
synced 2025-04-23 01:01:26 +00:00
54 lines
1.2 KiB
C++
54 lines
1.2 KiB
C++
#pragma once
|
|
#include "symbol.h"
|
|
#include <set>
|
|
|
|
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())
|
|
{
|
|
return iter;
|
|
}
|
|
|
|
size_t closest{ address - iter->address };
|
|
auto match = iter;
|
|
for (; iter != end(); ++iter)
|
|
{
|
|
const size_t distance = address - iter->address;
|
|
if (distance <= closest)
|
|
{
|
|
match = iter;
|
|
closest = distance;
|
|
}
|
|
}
|
|
|
|
return match;
|
|
}
|
|
|
|
iterator find(size_t address)
|
|
{
|
|
auto iter = std::multiset<Symbol, SymbolComparer>::find(address);
|
|
if (iter == end())
|
|
{
|
|
return iter;
|
|
}
|
|
|
|
size_t closest{ address - iter->address };
|
|
auto match = iter;
|
|
for (; iter != end(); ++iter)
|
|
{
|
|
const size_t distance = address - iter->address;
|
|
if (distance <= closest)
|
|
{
|
|
match = iter;
|
|
closest = distance;
|
|
}
|
|
}
|
|
|
|
return match;
|
|
}
|
|
};
|