aboutsummaryrefslogtreecommitdiff
path: root/src/core/file_sys/vfs_vector.h
diff options
context:
space:
mode:
authorbunnei <bunneidev@gmail.com>2018-12-04 19:59:52 -0500
committerGitHub <noreply@github.com>2018-12-04 19:59:52 -0500
commitd08d4a366b70751cfbbbbb1844df3f62fd0da8a1 (patch)
treeb66fada812f416a30041fc4bcb6f7b15f5af7490 /src/core/file_sys/vfs_vector.h
parentaf286294f9691a4eadfe6e19fa3edd45f12479e3 (diff)
parent86ad1f8db65e9e52795c9601ea120c6fe0e76e29 (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.h53
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: