mirror of
https://github.com/hedge-dev/XenonRecomp.git
synced 2025-07-23 05:23:59 +00:00
Symbol table
This commit is contained in:
53
PowerUtils/symbol_table.h
Normal file
53
PowerUtils/symbol_table.h
Normal file
@@ -0,0 +1,53 @@
|
||||
#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;
|
||||
}
|
||||
};
|
Reference in New Issue
Block a user