diff options
author | Zach Hilman <zachhilman@gmail.com> | 2018-08-03 17:50:00 +0200 |
---|---|---|
committer | Zach Hilman <zachhilman@gmail.com> | 2018-08-09 03:18:45 +0200 |
commit | 2de2ec25d6e8971809f98ebe36996c00e0f89f2d (patch) | |
tree | 7b8ec6b50b8c5de91eef426c3ad3cb4d0d7c2e05 /src/core/file_sys/vfs_real.h | |
parent | file_util: Add platform-specific slash option to SanitizePath (diff) | |
download | yuzu-2de2ec25d6e8971809f98ebe36996c00e0f89f2d.tar yuzu-2de2ec25d6e8971809f98ebe36996c00e0f89f2d.tar.gz yuzu-2de2ec25d6e8971809f98ebe36996c00e0f89f2d.tar.bz2 yuzu-2de2ec25d6e8971809f98ebe36996c00e0f89f2d.tar.lz yuzu-2de2ec25d6e8971809f98ebe36996c00e0f89f2d.tar.xz yuzu-2de2ec25d6e8971809f98ebe36996c00e0f89f2d.tar.zst yuzu-2de2ec25d6e8971809f98ebe36996c00e0f89f2d.zip |
Diffstat (limited to 'src/core/file_sys/vfs_real.h')
-rw-r--r-- | src/core/file_sys/vfs_real.h | 44 |
1 files changed, 38 insertions, 6 deletions
diff --git a/src/core/file_sys/vfs_real.h b/src/core/file_sys/vfs_real.h index 243d58576..dbb381a2a 100644 --- a/src/core/file_sys/vfs_real.h +++ b/src/core/file_sys/vfs_real.h @@ -6,18 +6,45 @@ #include <string_view> +#include <boost/container/flat_map.hpp> #include "common/file_util.h" #include "core/file_sys/mode.h" #include "core/file_sys/vfs.h" namespace FileSys { +class RealVfsFilesystem : public VfsFilesystem { +public: + RealVfsFilesystem(); + + std::string GetName() const override; + bool IsReadable() const override; + bool IsWritable() const override; + VfsEntryType GetEntryType(std::string_view path) const override; + VirtualFile OpenFile(std::string_view path, Mode perms = Mode::Read) override; + VirtualFile CreateFile(std::string_view path, Mode perms = Mode::ReadWrite) override; + VirtualFile CopyFile(std::string_view old_path, std::string_view new_path) override; + VirtualFile MoveFile(std::string_view old_path, std::string_view new_path) override; + bool DeleteFile(std::string_view path) override; + VirtualDir OpenDirectory(std::string_view path, Mode perms = Mode::Read) override; + VirtualDir CreateDirectory(std::string_view path, Mode perms = Mode::ReadWrite) override; + VirtualDir CopyDirectory(std::string_view old_path, std::string_view new_path) override; + VirtualDir MoveDirectory(std::string_view old_path, std::string_view new_path) override; + bool DeleteDirectory(std::string_view path) override; + +private: + boost::container::flat_map<std::string, std::weak_ptr<FileUtil::IOFile>> cache; +}; + // An implmentation of VfsFile that represents a file on the user's computer. -struct RealVfsFile : public VfsFile { - friend struct RealVfsDirectory; +class RealVfsFile : public VfsFile { + friend class RealVfsDirectory; + friend class RealVfsFilesystem; - RealVfsFile(const std::string& name, Mode perms = Mode::Read); + RealVfsFile(RealVfsFilesystem& base, std::shared_ptr<FileUtil::IOFile> backing, + const std::string& path, Mode perms = Mode::Read); +public: std::string GetName() const override; size_t GetSize() const override; bool Resize(size_t new_size) override; @@ -31,7 +58,8 @@ struct RealVfsFile : public VfsFile { private: bool Close(); - FileUtil::IOFile backing; + RealVfsFilesystem& base; + std::shared_ptr<FileUtil::IOFile> backing; std::string path; std::string parent_path; std::vector<std::string> path_components; @@ -40,9 +68,12 @@ private: }; // An implementation of VfsDirectory that represents a directory on the user's computer. -struct RealVfsDirectory : public VfsDirectory { - RealVfsDirectory(const std::string& path, Mode perms = Mode::Read); +class RealVfsDirectory : public VfsDirectory { + friend class RealVfsFilesystem; + + RealVfsDirectory(RealVfsFilesystem& base, const std::string& path, Mode perms = Mode::Read); +public: std::vector<std::shared_ptr<VfsFile>> GetFiles() const override; std::vector<std::shared_ptr<VfsDirectory>> GetSubdirectories() const override; bool IsWritable() const override; @@ -60,6 +91,7 @@ protected: bool ReplaceFileWithSubdirectory(VirtualFile file, VirtualDir dir) override; private: + RealVfsFilesystem& base; std::string path; std::string parent_path; std::vector<std::string> path_components; |