diff options
author | Zach Hilman <zachhilman@gmail.com> | 2018-08-10 02:46:41 +0200 |
---|---|---|
committer | Zach Hilman <zachhilman@gmail.com> | 2018-08-12 04:50:08 +0200 |
commit | 42114e1df49ff65f09865b53395e01858ca4929e (patch) | |
tree | 3d67f3a63681a531d629f25e85ddf22d2f8581fc /src/core/file_sys/vfs_concat.h | |
parent | crypto: Remove hex utilities from key_manager (diff) | |
download | yuzu-42114e1df49ff65f09865b53395e01858ca4929e.tar yuzu-42114e1df49ff65f09865b53395e01858ca4929e.tar.gz yuzu-42114e1df49ff65f09865b53395e01858ca4929e.tar.bz2 yuzu-42114e1df49ff65f09865b53395e01858ca4929e.tar.lz yuzu-42114e1df49ff65f09865b53395e01858ca4929e.tar.xz yuzu-42114e1df49ff65f09865b53395e01858ca4929e.tar.zst yuzu-42114e1df49ff65f09865b53395e01858ca4929e.zip |
Diffstat (limited to 'src/core/file_sys/vfs_concat.h')
-rw-r--r-- | src/core/file_sys/vfs_concat.h | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/src/core/file_sys/vfs_concat.h b/src/core/file_sys/vfs_concat.h new file mode 100644 index 000000000..d319c5786 --- /dev/null +++ b/src/core/file_sys/vfs_concat.h @@ -0,0 +1,41 @@ +// Copyright 2018 yuzu emulator team +// Licensed under GPLv2 or any later version +// Refer to the license.txt file included. + +#pragma once + +#include <memory> +#include <string_view> +#include <boost/container/flat_map.hpp> +#include "core/file_sys/vfs.h" + +namespace FileSys { + +// Wrapper function to allow for more efficient handling of files.size() == 0, 1 cases. +VirtualFile ConcatenateFiles(std::vector<VirtualFile> files, std::string_view name = ""); + +// Class that wraps multiple vfs files and concatenates them, making reads seamless. Currently +// read-only. +class ConcatenatedVfsFile : public VfsFile { + friend VirtualFile ConcatenateFiles(std::vector<VirtualFile> files, std::string_view name); + + ConcatenatedVfsFile(std::vector<VirtualFile> files, std::string_view name); + +public: + std::string GetName() const override; + size_t GetSize() const override; + bool Resize(size_t new_size) override; + std::shared_ptr<VfsDirectory> GetContainingDirectory() const override; + bool IsWritable() const override; + bool IsReadable() const override; + size_t Read(u8* data, size_t length, size_t offset) const override; + size_t Write(const u8* data, size_t length, size_t offset) override; + bool Rename(std::string_view name) override; + +private: + // Maps starting offset to file -- more efficient. + boost::container::flat_map<u64, VirtualFile> files; + std::string name; +}; + +} // namespace FileSys |