vfs_vector.cpp 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. // Copyright 2018 yuzu emulator team
  2. // Licensed under GPLv2 or any later version
  3. // Refer to the license.txt file included.
  4. #include <algorithm>
  5. #include <utility>
  6. #include "core/file_sys/vfs_vector.h"
  7. namespace FileSys {
  8. VectorVfsDirectory::VectorVfsDirectory(std::vector<VirtualFile> files_,
  9. std::vector<VirtualDir> dirs_, VirtualDir parent_,
  10. std::string name_)
  11. : files(std::move(files_)), dirs(std::move(dirs_)), parent(std::move(parent_)),
  12. name(std::move(name_)) {}
  13. std::vector<std::shared_ptr<VfsFile>> VectorVfsDirectory::GetFiles() const {
  14. return files;
  15. }
  16. std::vector<std::shared_ptr<VfsDirectory>> VectorVfsDirectory::GetSubdirectories() const {
  17. return dirs;
  18. }
  19. bool VectorVfsDirectory::IsWritable() const {
  20. return false;
  21. }
  22. bool VectorVfsDirectory::IsReadable() const {
  23. return true;
  24. }
  25. std::string VectorVfsDirectory::GetName() const {
  26. return name;
  27. }
  28. std::shared_ptr<VfsDirectory> VectorVfsDirectory::GetParentDirectory() const {
  29. return parent;
  30. }
  31. template <typename T>
  32. static bool FindAndRemoveVectorElement(std::vector<T>& vec, std::string_view name) {
  33. const auto iter =
  34. std::find_if(vec.begin(), vec.end(), [name](const T& e) { return e->GetName() == name; });
  35. if (iter == vec.end())
  36. return false;
  37. vec.erase(iter);
  38. return true;
  39. }
  40. bool VectorVfsDirectory::DeleteSubdirectory(std::string_view name) {
  41. return FindAndRemoveVectorElement(dirs, name);
  42. }
  43. bool VectorVfsDirectory::DeleteFile(std::string_view name) {
  44. return FindAndRemoveVectorElement(files, name);
  45. }
  46. bool VectorVfsDirectory::Rename(std::string_view name_) {
  47. name = name_;
  48. return true;
  49. }
  50. std::shared_ptr<VfsDirectory> VectorVfsDirectory::CreateSubdirectory(std::string_view name) {
  51. return nullptr;
  52. }
  53. std::shared_ptr<VfsFile> VectorVfsDirectory::CreateFile(std::string_view name) {
  54. return nullptr;
  55. }
  56. void VectorVfsDirectory::AddFile(VirtualFile file) {
  57. files.push_back(std::move(file));
  58. }
  59. void VectorVfsDirectory::AddDirectory(VirtualDir dir) {
  60. dirs.push_back(std::move(dir));
  61. }
  62. bool VectorVfsDirectory::ReplaceFileWithSubdirectory(VirtualFile file, VirtualDir dir) {
  63. if (!DeleteFile(file->GetName()))
  64. return false;
  65. dirs.emplace_back(std::move(dir));
  66. return true;
  67. }
  68. } // namespace FileSys