mirror of
				https://github.com/hedge-dev/XenonRecomp.git
				synced 2025-11-04 06:47:09 +00:00 
			
		
		
		
	Fix symbol find function.
This commit is contained in:
		@@ -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;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user