Browse Source
Merge pull request #10588 from liamwhite/vfs-cached
Merge pull request #10588 from liamwhite/vfs-cached
vfs: add vfs_cached for romfs buildnce_cpp
committed by
GitHub
7 changed files with 101 additions and 26 deletions
-
2src/core/CMakeLists.txt
-
5src/core/file_sys/patch_manager.cpp
-
3src/core/file_sys/romfs.cpp
-
63src/core/file_sys/vfs_cached.cpp
-
31src/core/file_sys/vfs_cached.h
-
19src/core/file_sys/vfs_vector.cpp
-
4src/core/file_sys/vfs_vector.h
@ -0,0 +1,63 @@ |
|||||
|
// SPDX-FileCopyrightText: Copyright 2023 yuzu Emulator Project
|
||||
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
|
||||
|
#include "core/file_sys/vfs_cached.h"
|
||||
|
#include "core/file_sys/vfs_types.h"
|
||||
|
|
||||
|
namespace FileSys { |
||||
|
|
||||
|
CachedVfsDirectory::CachedVfsDirectory(VirtualDir& source_dir) |
||||
|
: name(source_dir->GetName()), parent(source_dir->GetParentDirectory()) { |
||||
|
for (auto& dir : source_dir->GetSubdirectories()) { |
||||
|
dirs.emplace(dir->GetName(), std::make_shared<CachedVfsDirectory>(dir)); |
||||
|
} |
||||
|
for (auto& file : source_dir->GetFiles()) { |
||||
|
files.emplace(file->GetName(), file); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
CachedVfsDirectory::~CachedVfsDirectory() = default; |
||||
|
|
||||
|
VirtualFile CachedVfsDirectory::GetFile(std::string_view file_name) const { |
||||
|
auto it = files.find(file_name); |
||||
|
if (it != files.end()) { |
||||
|
return it->second; |
||||
|
} |
||||
|
|
||||
|
return nullptr; |
||||
|
} |
||||
|
|
||||
|
VirtualDir CachedVfsDirectory::GetSubdirectory(std::string_view dir_name) const { |
||||
|
auto it = dirs.find(dir_name); |
||||
|
if (it != dirs.end()) { |
||||
|
return it->second; |
||||
|
} |
||||
|
|
||||
|
return nullptr; |
||||
|
} |
||||
|
|
||||
|
std::vector<VirtualFile> CachedVfsDirectory::GetFiles() const { |
||||
|
std::vector<VirtualFile> out; |
||||
|
for (auto& [file_name, file] : files) { |
||||
|
out.push_back(file); |
||||
|
} |
||||
|
return out; |
||||
|
} |
||||
|
|
||||
|
std::vector<VirtualDir> CachedVfsDirectory::GetSubdirectories() const { |
||||
|
std::vector<VirtualDir> out; |
||||
|
for (auto& [dir_name, dir] : dirs) { |
||||
|
out.push_back(dir); |
||||
|
} |
||||
|
return out; |
||||
|
} |
||||
|
|
||||
|
std::string CachedVfsDirectory::GetName() const { |
||||
|
return name; |
||||
|
} |
||||
|
|
||||
|
VirtualDir CachedVfsDirectory::GetParentDirectory() const { |
||||
|
return parent; |
||||
|
} |
||||
|
|
||||
|
} // namespace FileSys
|
||||
@ -0,0 +1,31 @@ |
|||||
|
// SPDX-FileCopyrightText: Copyright 2023 yuzu Emulator Project |
||||
|
// SPDX-License-Identifier: GPL-2.0-or-later |
||||
|
|
||||
|
#pragma once |
||||
|
|
||||
|
#include <string_view> |
||||
|
#include <vector> |
||||
|
#include "core/file_sys/vfs.h" |
||||
|
|
||||
|
namespace FileSys { |
||||
|
|
||||
|
class CachedVfsDirectory : public ReadOnlyVfsDirectory { |
||||
|
public: |
||||
|
CachedVfsDirectory(VirtualDir& source_directory); |
||||
|
|
||||
|
~CachedVfsDirectory() override; |
||||
|
VirtualFile GetFile(std::string_view file_name) const override; |
||||
|
VirtualDir GetSubdirectory(std::string_view dir_name) const override; |
||||
|
std::vector<VirtualFile> GetFiles() const override; |
||||
|
std::vector<VirtualDir> GetSubdirectories() const override; |
||||
|
std::string GetName() const override; |
||||
|
VirtualDir GetParentDirectory() const override; |
||||
|
|
||||
|
private: |
||||
|
std::string name; |
||||
|
VirtualDir parent; |
||||
|
std::map<std::string, VirtualDir, std::less<>> dirs; |
||||
|
std::map<std::string, VirtualFile, std::less<>> files; |
||||
|
}; |
||||
|
|
||||
|
} // namespace FileSys |
||||
Write
Preview
Loading…
Cancel
Save
Reference in new issue