diff options
author | Liam <byteslice@airmail.cc> | 2023-11-28 04:27:57 +0100 |
---|---|---|
committer | Liam <byteslice@airmail.cc> | 2023-12-03 22:29:57 +0100 |
commit | 07514887273edee003b26e308b7ad6bb0c3e8fbc (patch) | |
tree | 26004d732c91a7913cfabbfe64e5ca4125ac78e3 /src/core/file_sys/vfs_layered.cpp | |
parent | romfs: cache file and directory metadata tables (diff) | |
download | yuzu-07514887273edee003b26e308b7ad6bb0c3e8fbc.tar yuzu-07514887273edee003b26e308b7ad6bb0c3e8fbc.tar.gz yuzu-07514887273edee003b26e308b7ad6bb0c3e8fbc.tar.bz2 yuzu-07514887273edee003b26e308b7ad6bb0c3e8fbc.tar.lz yuzu-07514887273edee003b26e308b7ad6bb0c3e8fbc.tar.xz yuzu-07514887273edee003b26e308b7ad6bb0c3e8fbc.tar.zst yuzu-07514887273edee003b26e308b7ad6bb0c3e8fbc.zip |
Diffstat (limited to '')
-rw-r--r-- | src/core/file_sys/vfs_layered.cpp | 21 |
1 files changed, 11 insertions, 10 deletions
diff --git a/src/core/file_sys/vfs_layered.cpp b/src/core/file_sys/vfs_layered.cpp index 08daca397..5551743fb 100644 --- a/src/core/file_sys/vfs_layered.cpp +++ b/src/core/file_sys/vfs_layered.cpp @@ -3,6 +3,7 @@ #include <algorithm> #include <set> +#include <unordered_set> #include <utility> #include "core/file_sys/vfs_layered.h" @@ -59,13 +60,12 @@ std::string LayeredVfsDirectory::GetFullPath() const { std::vector<VirtualFile> LayeredVfsDirectory::GetFiles() const { std::vector<VirtualFile> out; - std::set<std::string, std::less<>> out_names; + std::unordered_set<std::string> out_names; for (const auto& layer : dirs) { for (auto& file : layer->GetFiles()) { - auto file_name = file->GetName(); - if (!out_names.contains(file_name)) { - out_names.emplace(std::move(file_name)); + const auto [it, is_new] = out_names.emplace(file->GetName()); + if (is_new) { out.emplace_back(std::move(file)); } } @@ -75,18 +75,19 @@ std::vector<VirtualFile> LayeredVfsDirectory::GetFiles() const { } std::vector<VirtualDir> LayeredVfsDirectory::GetSubdirectories() const { - std::vector<std::string> names; + std::vector<VirtualDir> out; + std::unordered_set<std::string> out_names; + for (const auto& layer : dirs) { for (const auto& sd : layer->GetSubdirectories()) { - if (std::find(names.begin(), names.end(), sd->GetName()) == names.end()) - names.push_back(sd->GetName()); + out_names.emplace(sd->GetName()); } } - std::vector<VirtualDir> out; - out.reserve(names.size()); - for (const auto& subdir : names) + out.reserve(out_names.size()); + for (const auto& subdir : out_names) { out.emplace_back(GetSubdirectory(subdir)); + } return out; } |