Browse Source

core: Reduce string copies in GetGameFileFromPath()

Eliminates some minor string churn where applicable. Also eliminates an
unnecessary vector copy.
Lioncash 5 years ago
parent
commit
9d3d0ae999
1 changed files with 22 additions and 12 deletions
  1. 22 12
      src/core/core.cpp

+ 22 - 12
src/core/core.cpp

@@ -92,33 +92,43 @@ FileSys::VirtualFile GetGameFileFromPath(const FileSys::VirtualFilesystem& vfs,
     std::string dir_name;
     std::string dir_name;
     std::string filename;
     std::string filename;
     Common::SplitPath(path, &dir_name, &filename, nullptr);
     Common::SplitPath(path, &dir_name, &filename, nullptr);
+
     if (filename == "00") {
     if (filename == "00") {
         const auto dir = vfs->OpenDirectory(dir_name, FileSys::Mode::Read);
         const auto dir = vfs->OpenDirectory(dir_name, FileSys::Mode::Read);
         std::vector<FileSys::VirtualFile> concat;
         std::vector<FileSys::VirtualFile> concat;
-        for (u8 i = 0; i < 0x10; ++i) {
-            auto next = dir->GetFile(fmt::format("{:02X}", i));
-            if (next != nullptr)
+
+        for (u32 i = 0; i < 0x10; ++i) {
+            const auto file_name = fmt::format("{:02X}", i);
+            auto next = dir->GetFile(file_name);
+
+            if (next != nullptr) {
                 concat.push_back(std::move(next));
                 concat.push_back(std::move(next));
-            else {
-                next = dir->GetFile(fmt::format("{:02x}", i));
-                if (next != nullptr)
-                    concat.push_back(std::move(next));
-                else
+            } else {
+                next = dir->GetFile(file_name);
+
+                if (next == nullptr) {
                     break;
                     break;
+                }
+
+                concat.push_back(std::move(next));
             }
             }
         }
         }
 
 
-        if (concat.empty())
+        if (concat.empty()) {
             return nullptr;
             return nullptr;
+        }
 
 
-        return FileSys::ConcatenatedVfsFile::MakeConcatenatedFile(concat, dir->GetName());
+        return FileSys::ConcatenatedVfsFile::MakeConcatenatedFile(std::move(concat),
+                                                                  dir->GetName());
     }
     }
 
 
-    if (Common::FS::IsDirectory(path))
-        return vfs->OpenFile(path + "/" + "main", FileSys::Mode::Read);
+    if (Common::FS::IsDirectory(path)) {
+        return vfs->OpenFile(path + "/main", FileSys::Mode::Read);
+    }
 
 
     return vfs->OpenFile(path, FileSys::Mode::Read);
     return vfs->OpenFile(path, FileSys::Mode::Read);
 }
 }
+
 struct System::Impl {
 struct System::Impl {
     explicit Impl(System& system)
     explicit Impl(System& system)
         : kernel{system}, fs_controller{system}, memory{system},
         : kernel{system}, fs_controller{system}, memory{system},