#pragma once #include "symbol.h" #include class SymbolTable : public std::multiset { public: const_iterator find(size_t address) const { auto [beginIt, endIt] = equal_range(address); if (beginIt == endIt) { return end(); } size_t closest{ address - beginIt->address }; auto match = end(); for (auto it = beginIt; it != endIt; ++it) { if (address < it->address || address >= it->address + it->size) { continue; } const size_t distance = address - it->address; if (distance <= closest) { match = it; closest = distance; } } return match; } iterator find(size_t address) { auto [beginIt, endIt] = equal_range(address); if (beginIt == endIt) { return end(); } size_t closest{ address - beginIt->address }; auto match = end(); for (auto it = beginIt; it != endIt; ++it) { if (address < it->address || address >= it->address + it->size) { continue; } const size_t distance = address - it->address; if (distance <= closest) { match = it; closest = distance; } } return match; } };