diff options
| author | bunnei <bunneidev@gmail.com> | 2018-12-04 19:59:52 -0500 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2018-12-04 19:59:52 -0500 |
| commit | d08d4a366b70751cfbbbbb1844df3f62fd0da8a1 (patch) | |
| tree | b66fada812f416a30041fc4bcb6f7b15f5af7490 /src/core/file_sys/vfs_vector.h | |
| parent | af286294f9691a4eadfe6e19fa3edd45f12479e3 (diff) | |
| parent | 86ad1f8db65e9e52795c9601ea120c6fe0e76e29 (diff) | |
Merge pull request #1704 from DarkLordZach/oss-sysarchive
file_sys: Implement open source system archives
Diffstat (limited to 'src/core/file_sys/vfs_vector.h')
| -rw-r--r-- | src/core/file_sys/vfs_vector.h | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/src/core/file_sys/vfs_vector.h b/src/core/file_sys/vfs_vector.h index 3e3f790c3..ac36cb2ee 100644 --- a/src/core/file_sys/vfs_vector.h +++ b/src/core/file_sys/vfs_vector.h @@ -4,10 +4,63 @@ #pragma once +#include <cstring> #include "core/file_sys/vfs.h" namespace FileSys { +// An implementation of VfsFile that is backed by a statically-sized array +template <std::size_t size> +class ArrayVfsFile : public VfsFile { +public: + ArrayVfsFile(std::array<u8, size> data, std::string name = "", VirtualDir parent = nullptr) + : data(data), name(std::move(name)), parent(std::move(parent)) {} + + std::string GetName() const override { + return name; + } + + std::size_t GetSize() const override { + return size; + } + + bool Resize(std::size_t new_size) override { + return false; + } + + std::shared_ptr<VfsDirectory> GetContainingDirectory() const override { + return parent; + } + + bool IsWritable() const override { + return false; + } + + bool IsReadable() const override { + return true; + } + + std::size_t Read(u8* data_, std::size_t length, std::size_t offset) const override { + const auto read = std::min(length, size - offset); + std::memcpy(data_, data.data() + offset, read); + return read; + } + + std::size_t Write(const u8* data, std::size_t length, std::size_t offset) override { + return 0; + } + + bool Rename(std::string_view name) override { + this->name = name; + return true; + } + +private: + std::array<u8, size> data; + std::string name; + VirtualDir parent; +}; + // An implementation of VfsFile that is backed by a vector optionally supplied upon construction class VectorVfsFile : public VfsFile { public: |
