diff options
author | bunnei <bunneidev@gmail.com> | 2018-07-08 05:24:51 +0200 |
---|---|---|
committer | bunnei <bunneidev@gmail.com> | 2018-07-08 05:24:51 +0200 |
commit | 913896cbd99e414c325c9d47a987376ed6d9fffd (patch) | |
tree | b660920a49f538f0ee00486c50a0d153d53c423d /src/core/file_sys/vfs.cpp | |
parent | Merge pull request #632 from FearlessTobi/add-discord-link (diff) | |
download | yuzu-913896cbd99e414c325c9d47a987376ed6d9fffd.tar yuzu-913896cbd99e414c325c9d47a987376ed6d9fffd.tar.gz yuzu-913896cbd99e414c325c9d47a987376ed6d9fffd.tar.bz2 yuzu-913896cbd99e414c325c9d47a987376ed6d9fffd.tar.lz yuzu-913896cbd99e414c325c9d47a987376ed6d9fffd.tar.xz yuzu-913896cbd99e414c325c9d47a987376ed6d9fffd.tar.zst yuzu-913896cbd99e414c325c9d47a987376ed6d9fffd.zip |
Diffstat (limited to 'src/core/file_sys/vfs.cpp')
-rw-r--r-- | src/core/file_sys/vfs.cpp | 187 |
1 files changed, 0 insertions, 187 deletions
diff --git a/src/core/file_sys/vfs.cpp b/src/core/file_sys/vfs.cpp deleted file mode 100644 index c99071d6a..000000000 --- a/src/core/file_sys/vfs.cpp +++ /dev/null @@ -1,187 +0,0 @@ -// Copyright 2018 yuzu emulator team -// Licensed under GPLv2 or any later version -// Refer to the license.txt file included. - -#include <algorithm> -#include <numeric> -#include "common/file_util.h" -#include "core/file_sys/vfs.h" - -namespace FileSys { - -VfsFile::~VfsFile() = default; - -std::string VfsFile::GetExtension() const { - return FileUtil::GetExtensionFromFilename(GetName()); -} - -VfsDirectory::~VfsDirectory() = default; - -boost::optional<u8> VfsFile::ReadByte(size_t offset) const { - u8 out{}; - size_t size = Read(&out, 1, offset); - if (size == 1) - return out; - - return boost::none; -} - -std::vector<u8> VfsFile::ReadBytes(size_t size, size_t offset) const { - std::vector<u8> out(size); - size_t read_size = Read(out.data(), size, offset); - out.resize(read_size); - return out; -} - -std::vector<u8> VfsFile::ReadAllBytes() const { - return ReadBytes(GetSize()); -} - -bool VfsFile::WriteByte(u8 data, size_t offset) { - return Write(&data, 1, offset) == 1; -} - -size_t VfsFile::WriteBytes(std::vector<u8> data, size_t offset) { - return Write(data.data(), data.size(), offset); -} - -std::shared_ptr<VfsFile> VfsDirectory::GetFileRelative(const std::string& path) const { - auto vec = FileUtil::SplitPathComponents(path); - vec.erase(std::remove_if(vec.begin(), vec.end(), [](const auto& str) { return str.empty(); }), - vec.end()); - if (vec.empty()) - return nullptr; - if (vec.size() == 1) - return GetFile(vec[0]); - auto dir = GetSubdirectory(vec[0]); - for (size_t i = 1; i < vec.size() - 1; ++i) { - if (dir == nullptr) - return nullptr; - dir = dir->GetSubdirectory(vec[i]); - } - if (dir == nullptr) - return nullptr; - return dir->GetFile(vec.back()); -} - -std::shared_ptr<VfsFile> VfsDirectory::GetFileAbsolute(const std::string& path) const { - if (IsRoot()) - return GetFileRelative(path); - - return GetParentDirectory()->GetFileAbsolute(path); -} - -std::shared_ptr<VfsDirectory> VfsDirectory::GetDirectoryRelative(const std::string& path) const { - auto vec = FileUtil::SplitPathComponents(path); - vec.erase(std::remove_if(vec.begin(), vec.end(), [](const auto& str) { return str.empty(); }), - vec.end()); - if (vec.empty()) - // return std::shared_ptr<VfsDirectory>(this); - return nullptr; - auto dir = GetSubdirectory(vec[0]); - for (size_t i = 1; i < vec.size(); ++i) { - dir = dir->GetSubdirectory(vec[i]); - } - return dir; -} - -std::shared_ptr<VfsDirectory> VfsDirectory::GetDirectoryAbsolute(const std::string& path) const { - if (IsRoot()) - return GetDirectoryRelative(path); - - return GetParentDirectory()->GetDirectoryAbsolute(path); -} - -std::shared_ptr<VfsFile> VfsDirectory::GetFile(const std::string& name) const { - const auto& files = GetFiles(); - const auto iter = std::find_if(files.begin(), files.end(), - [&name](const auto& file1) { return name == file1->GetName(); }); - return iter == files.end() ? nullptr : *iter; -} - -std::shared_ptr<VfsDirectory> VfsDirectory::GetSubdirectory(const std::string& name) const { - const auto& subs = GetSubdirectories(); - const auto iter = std::find_if(subs.begin(), subs.end(), - [&name](const auto& file1) { return name == file1->GetName(); }); - return iter == subs.end() ? nullptr : *iter; -} - -bool VfsDirectory::IsRoot() const { - return GetParentDirectory() == nullptr; -} - -size_t VfsDirectory::GetSize() const { - const auto& files = GetFiles(); - const auto file_total = - std::accumulate(files.begin(), files.end(), 0ull, - [](const auto& f1, const auto& f2) { return f1 + f2->GetSize(); }); - - const auto& sub_dir = GetSubdirectories(); - const auto subdir_total = - std::accumulate(sub_dir.begin(), sub_dir.end(), 0ull, - [](const auto& f1, const auto& f2) { return f1 + f2->GetSize(); }); - - return file_total + subdir_total; -} - -bool VfsDirectory::DeleteSubdirectoryRecursive(const std::string& name) { - auto dir = GetSubdirectory(name); - if (dir == nullptr) - return false; - - bool success = true; - for (const auto& file : dir->GetFiles()) { - if (!DeleteFile(file->GetName())) - success = false; - } - - for (const auto& sdir : dir->GetSubdirectories()) { - if (!dir->DeleteSubdirectoryRecursive(sdir->GetName())) - success = false; - } - - return success; -} - -bool VfsDirectory::Copy(const std::string& src, const std::string& dest) { - const auto f1 = GetFile(src); - auto f2 = CreateFile(dest); - if (f1 == nullptr || f2 == nullptr) - return false; - - if (!f2->Resize(f1->GetSize())) { - DeleteFile(dest); - return false; - } - - return f2->WriteBytes(f1->ReadAllBytes()) == f1->GetSize(); -} - -bool ReadOnlyVfsDirectory::IsWritable() const { - return false; -} - -bool ReadOnlyVfsDirectory::IsReadable() const { - return true; -} - -std::shared_ptr<VfsDirectory> ReadOnlyVfsDirectory::CreateSubdirectory(const std::string& name) { - return nullptr; -} - -std::shared_ptr<VfsFile> ReadOnlyVfsDirectory::CreateFile(const std::string& name) { - return nullptr; -} - -bool ReadOnlyVfsDirectory::DeleteSubdirectory(const std::string& name) { - return false; -} - -bool ReadOnlyVfsDirectory::DeleteFile(const std::string& name) { - return false; -} - -bool ReadOnlyVfsDirectory::Rename(const std::string& name) { - return false; -} -} // namespace FileSys |