2018-07-28 00:14:03 +02:00
|
|
|
// Copyright 2018 yuzu emulator team
|
|
|
|
// Licensed under GPLv2 or any later version
|
|
|
|
// Refer to the license.txt file included.
|
|
|
|
|
|
|
|
#include <algorithm>
|
2018-08-02 17:36:01 +02:00
|
|
|
#include <utility>
|
2018-07-28 00:14:03 +02:00
|
|
|
#include "core/file_sys/vfs_vector.h"
|
|
|
|
|
|
|
|
namespace FileSys {
|
|
|
|
VectorVfsDirectory::VectorVfsDirectory(std::vector<VirtualFile> files_,
|
2018-08-12 04:44:50 +02:00
|
|
|
std::vector<VirtualDir> dirs_, std::string name_,
|
|
|
|
VirtualDir parent_)
|
2018-07-28 00:14:03 +02:00
|
|
|
: files(std::move(files_)), dirs(std::move(dirs_)), parent(std::move(parent_)),
|
|
|
|
name(std::move(name_)) {}
|
|
|
|
|
2018-09-20 01:19:05 +02:00
|
|
|
VectorVfsDirectory::~VectorVfsDirectory() = default;
|
|
|
|
|
2018-07-28 00:14:03 +02:00
|
|
|
std::vector<std::shared_ptr<VfsFile>> VectorVfsDirectory::GetFiles() const {
|
|
|
|
return files;
|
|
|
|
}
|
|
|
|
|
|
|
|
std::vector<std::shared_ptr<VfsDirectory>> VectorVfsDirectory::GetSubdirectories() const {
|
|
|
|
return dirs;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool VectorVfsDirectory::IsWritable() const {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool VectorVfsDirectory::IsReadable() const {
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
std::string VectorVfsDirectory::GetName() const {
|
|
|
|
return name;
|
|
|
|
}
|
2018-08-02 17:36:01 +02:00
|
|
|
|
2018-07-28 00:14:03 +02:00
|
|
|
std::shared_ptr<VfsDirectory> VectorVfsDirectory::GetParentDirectory() const {
|
|
|
|
return parent;
|
|
|
|
}
|
|
|
|
|
|
|
|
template <typename T>
|
|
|
|
static bool FindAndRemoveVectorElement(std::vector<T>& vec, std::string_view name) {
|
2018-08-02 17:40:20 +02:00
|
|
|
const auto iter =
|
2018-08-02 17:36:01 +02:00
|
|
|
std::find_if(vec.begin(), vec.end(), [name](const T& e) { return e->GetName() == name; });
|
2018-07-28 00:14:03 +02:00
|
|
|
if (iter == vec.end())
|
|
|
|
return false;
|
2018-08-02 17:40:20 +02:00
|
|
|
|
2018-07-28 00:14:03 +02:00
|
|
|
vec.erase(iter);
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool VectorVfsDirectory::DeleteSubdirectory(std::string_view name) {
|
|
|
|
return FindAndRemoveVectorElement(dirs, name);
|
|
|
|
}
|
|
|
|
|
|
|
|
bool VectorVfsDirectory::DeleteFile(std::string_view name) {
|
|
|
|
return FindAndRemoveVectorElement(files, name);
|
|
|
|
}
|
|
|
|
|
|
|
|
bool VectorVfsDirectory::Rename(std::string_view name_) {
|
|
|
|
name = name_;
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
std::shared_ptr<VfsDirectory> VectorVfsDirectory::CreateSubdirectory(std::string_view name) {
|
|
|
|
return nullptr;
|
|
|
|
}
|
|
|
|
|
|
|
|
std::shared_ptr<VfsFile> VectorVfsDirectory::CreateFile(std::string_view name) {
|
|
|
|
return nullptr;
|
|
|
|
}
|
|
|
|
|
|
|
|
void VectorVfsDirectory::AddFile(VirtualFile file) {
|
|
|
|
files.push_back(std::move(file));
|
|
|
|
}
|
|
|
|
|
|
|
|
void VectorVfsDirectory::AddDirectory(VirtualDir dir) {
|
|
|
|
dirs.push_back(std::move(dir));
|
|
|
|
}
|
|
|
|
|
|
|
|
bool VectorVfsDirectory::ReplaceFileWithSubdirectory(VirtualFile file, VirtualDir dir) {
|
|
|
|
if (!DeleteFile(file->GetName()))
|
|
|
|
return false;
|
2018-08-02 17:36:01 +02:00
|
|
|
dirs.emplace_back(std::move(dir));
|
2018-07-28 00:14:03 +02:00
|
|
|
return true;
|
|
|
|
}
|
|
|
|
} // namespace FileSys
|