vfs_static.h 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. // SPDX-FileCopyrightText: Copyright 2018 yuzu Emulator Project
  2. // SPDX-License-Identifier: GPL-2.0-or-later
  3. #pragma once
  4. #include <algorithm>
  5. #include <memory>
  6. #include <string_view>
  7. #include "core/file_sys/vfs.h"
  8. namespace FileSys {
  9. class StaticVfsFile : public VfsFile {
  10. public:
  11. explicit StaticVfsFile(u8 value_, std::size_t size_ = 0, std::string name_ = "",
  12. VirtualDir parent_ = nullptr)
  13. : value{value_}, size{size_}, name{std::move(name_)}, parent{std::move(parent_)} {}
  14. std::string GetName() const override {
  15. return name;
  16. }
  17. std::size_t GetSize() const override {
  18. return size;
  19. }
  20. bool Resize(std::size_t new_size) override {
  21. size = new_size;
  22. return true;
  23. }
  24. VirtualDir 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. std::size_t Read(u8* data, std::size_t length, std::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. std::size_t Write(const u8* data, std::size_t length, std::size_t offset) override {
  39. return 0;
  40. }
  41. std::optional<u8> ReadByte(std::size_t offset) const override {
  42. if (offset >= size) {
  43. return std::nullopt;
  44. }
  45. return value;
  46. }
  47. std::vector<u8> ReadBytes(std::size_t length, std::size_t offset) const override {
  48. const auto read = std::min(length, size - offset);
  49. return std::vector<u8>(read, value);
  50. }
  51. bool Rename(std::string_view new_name) override {
  52. name = new_name;
  53. return true;
  54. }
  55. private:
  56. u8 value;
  57. std::size_t size;
  58. std::string name;
  59. VirtualDir parent;
  60. };
  61. } // namespace FileSys