vfs_static.h 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  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 <memory>
  6. #include <string_view>
  7. #include "core/file_sys/vfs.h"
  8. namespace FileSys {
  9. template <u8 value>
  10. class StaticVfsFile : public VfsFile {
  11. public:
  12. explicit StaticVfsFile(size_t size = 0, std::string name = "", VirtualDir parent = nullptr)
  13. : size(size), name(name), parent(parent) {}
  14. std::string GetName() const override {
  15. return name;
  16. }
  17. size_t GetSize() const override {
  18. return size;
  19. }
  20. bool Resize(size_t new_size) override {
  21. size = new_size;
  22. return true;
  23. }
  24. std::shared_ptr<VfsDirectory> GetContainingDirectory() const override {
  25. return parent;
  26. }
  27. bool IsWritable() const override {
  28. return false;
  29. }
  30. bool IsReadable() const override {
  31. return true;
  32. }
  33. size_t Read(u8* data, size_t length, size_t offset) const override {
  34. const auto read = std::min(length, size - offset);
  35. std::fill(data, data + read, value);
  36. return read;
  37. }
  38. size_t Write(const u8* data, size_t length, size_t offset) override {
  39. return 0;
  40. }
  41. boost::optional<u8> ReadByte(size_t offset) const override {
  42. if (offset < size)
  43. return value;
  44. return boost::none;
  45. }
  46. std::vector<u8> ReadBytes(size_t length, size_t offset) const override {
  47. const auto read = std::min(length, size - offset);
  48. return std::vector<u8>(read, value);
  49. }
  50. bool Rename(std::string_view new_name) override {
  51. name = new_name;
  52. return true;
  53. }
  54. private:
  55. size_t size;
  56. std::string name;
  57. VirtualDir parent;
  58. };
  59. } // namespace FileSys