vfs_vector.h 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. // Copyright 2018 yuzu emulator team
  2. // Licensed under GPLv2 or any later version
  3. // Refer to the license.txt file included.
  4. #pragma once
  5. #include "core/file_sys/vfs.h"
  6. namespace FileSys {
  7. // An implementation of VfsFile that is backed by a vector optionally supplied upon construction
  8. class VectorVfsFile : public VfsFile {
  9. public:
  10. explicit VectorVfsFile(std::vector<u8> initial_data = {}, std::string name = "",
  11. VirtualDir parent = nullptr);
  12. ~VectorVfsFile() override;
  13. std::string GetName() const override;
  14. size_t GetSize() const override;
  15. bool Resize(size_t new_size) override;
  16. std::shared_ptr<VfsDirectory> GetContainingDirectory() const override;
  17. bool IsWritable() const override;
  18. bool IsReadable() const override;
  19. size_t Read(u8* data, size_t length, size_t offset) const override;
  20. size_t Write(const u8* data, size_t length, size_t offset) override;
  21. bool Rename(std::string_view name) override;
  22. virtual void Assign(std::vector<u8> new_data);
  23. private:
  24. std::vector<u8> data;
  25. VirtualDir parent;
  26. std::string name;
  27. };
  28. // An implementation of VfsDirectory that maintains two vectors for subdirectories and files.
  29. // Vector data is supplied upon construction.
  30. class VectorVfsDirectory : public VfsDirectory {
  31. public:
  32. explicit VectorVfsDirectory(std::vector<VirtualFile> files = {},
  33. std::vector<VirtualDir> dirs = {}, std::string name = "",
  34. VirtualDir parent = nullptr);
  35. ~VectorVfsDirectory() override;
  36. std::vector<std::shared_ptr<VfsFile>> GetFiles() const override;
  37. std::vector<std::shared_ptr<VfsDirectory>> GetSubdirectories() const override;
  38. bool IsWritable() const override;
  39. bool IsReadable() const override;
  40. std::string GetName() const override;
  41. std::shared_ptr<VfsDirectory> GetParentDirectory() const override;
  42. bool DeleteSubdirectory(std::string_view name) override;
  43. bool DeleteFile(std::string_view name) override;
  44. bool Rename(std::string_view name) override;
  45. std::shared_ptr<VfsDirectory> CreateSubdirectory(std::string_view name) override;
  46. std::shared_ptr<VfsFile> CreateFile(std::string_view name) override;
  47. virtual void AddFile(VirtualFile file);
  48. virtual void AddDirectory(VirtualDir dir);
  49. protected:
  50. bool ReplaceFileWithSubdirectory(VirtualFile file, VirtualDir dir) override;
  51. private:
  52. std::vector<VirtualFile> files;
  53. std::vector<VirtualDir> dirs;
  54. VirtualDir parent;
  55. std::string name;
  56. };
  57. } // namespace FileSys