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++) |     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; | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		
		Reference in a new issue
	
	 Skyth
						Skyth