mirror of
				https://github.com/hedge-dev/XenonRecomp.git
				synced 2025-10-30 07:11:38 +00:00 
			
		
		
		
	Fix symbol find function.
This commit is contained in:
		
							parent
							
								
									fc1efc5a37
								
							
						
					
					
						commit
						df78800c8d
					
				
					 2 changed files with 17 additions and 17 deletions
				
			
		|  | @ -113,7 +113,7 @@ int main() | |||
| 
 | ||||
|     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); | ||||
| 
 | ||||
|         auto& fn = functions[funcIdx]; | ||||
|  |  | |||
|  | @ -7,25 +7,25 @@ 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()) | ||||
|         auto [beginIt, endIt] = equal_range(address); | ||||
|         if (beginIt == endIt) | ||||
|         { | ||||
|             return iter; | ||||
|             return end(); | ||||
|         } | ||||
| 
 | ||||
|         size_t closest{ address - iter->address }; | ||||
|         size_t closest{ address - beginIt->address }; | ||||
|         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; | ||||
|             } | ||||
| 
 | ||||
|             const size_t distance = address - iter->address; | ||||
|             const size_t distance = address - it->address; | ||||
|             if (distance <= closest) | ||||
|             { | ||||
|                 match = iter; | ||||
|                 match = it; | ||||
|                 closest = distance; | ||||
|             } | ||||
|         } | ||||
|  | @ -35,25 +35,25 @@ public: | |||
| 
 | ||||
|     iterator find(size_t address) | ||||
|     { | ||||
|         auto iter = std::multiset<Symbol, SymbolComparer>::find(address); | ||||
|         if (iter == end()) | ||||
|         auto [beginIt, endIt] = equal_range(address); | ||||
|         if (beginIt == endIt) | ||||
|         { | ||||
|             return iter; | ||||
|             return end(); | ||||
|         } | ||||
| 
 | ||||
|         size_t closest{ address - iter->address }; | ||||
|         size_t closest{ address - beginIt->address }; | ||||
|         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; | ||||
|             } | ||||
| 
 | ||||
|             const size_t distance = address - iter->address; | ||||
|             const size_t distance = address - it->address; | ||||
|             if (distance <= closest) | ||||
|             { | ||||
|                 match = iter; | ||||
|                 match = it; | ||||
|                 closest = distance; | ||||
|             } | ||||
|         } | ||||
|  |  | |||
		Loading…
	
	Add table
		
		Reference in a new issue
	
	 Skyth
						Skyth