mirror of
				https://git.zaroz.cloud/nintendo-back-up/yuzu/yuzu.git
				synced 2025-05-12 00:45:25 +00:00 
			
		
		
		
	fsp_srv: Emplace entries first when building index instead of emplacing last
The current way were doing it would require copying a 768 character buffer (part of the Entry struct) to the new element in the vector. Given it's a plain array, std::move won't eliminate that. Instead, we can emplace an instance directly into the destination buffer and then fill it out, avoiding the need to perform any unnecessary copies. Given this is done in a loop, we can request the destination to allocate all of the necessary memory ahead of time, avoiding the need to potentially keep reallocating over and over on every few insertions into the vector.
This commit is contained in:
		
							parent
							
								
									d224eb7c39
								
							
						
					
					
						commit
						4afb05d0cc
					
				| @ -193,13 +193,14 @@ private: | |||||||
| template <typename T> | template <typename T> | ||||||
| static void BuildEntryIndex(std::vector<FileSys::Entry>& entries, const std::vector<T>& new_data, | static void BuildEntryIndex(std::vector<FileSys::Entry>& entries, const std::vector<T>& new_data, | ||||||
|                             FileSys::EntryType type) { |                             FileSys::EntryType type) { | ||||||
|  |     entries.reserve(entries.size() + new_data.size()); | ||||||
|  | 
 | ||||||
|     for (const auto& new_entry : new_data) { |     for (const auto& new_entry : new_data) { | ||||||
|         FileSys::Entry entry; |         auto& entry = entries.emplace_back(); | ||||||
|         entry.filename[0] = '\0'; |         entry.filename[0] = '\0'; | ||||||
|         std::strncat(entry.filename, new_entry->GetName().c_str(), FileSys::FILENAME_LENGTH - 1); |         std::strncat(entry.filename, new_entry->GetName().c_str(), FileSys::FILENAME_LENGTH - 1); | ||||||
|         entry.type = type; |         entry.type = type; | ||||||
|         entry.file_size = new_entry->GetSize(); |         entry.file_size = new_entry->GetSize(); | ||||||
|         entries.emplace_back(std::move(entry)); |  | ||||||
|     } |     } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Lioncash
						Lioncash