diff options
author | bunnei <bunneidev@gmail.com> | 2018-09-26 22:09:16 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-09-26 22:09:16 +0200 |
commit | 92dd496fb94385aa16adec75d6eb8bc3ef29c6b0 (patch) | |
tree | 113a0ad25b279c70d825514e9e35020f08a366a4 /src/core/file_sys/vfs_concat.h | |
parent | Merge pull request #1398 from lioncash/macos (diff) | |
parent | patch_manager: Invert conditionals within ApplyLayeredFS() (diff) | |
download | yuzu-92dd496fb94385aa16adec75d6eb8bc3ef29c6b0.tar yuzu-92dd496fb94385aa16adec75d6eb8bc3ef29c6b0.tar.gz yuzu-92dd496fb94385aa16adec75d6eb8bc3ef29c6b0.tar.bz2 yuzu-92dd496fb94385aa16adec75d6eb8bc3ef29c6b0.tar.lz yuzu-92dd496fb94385aa16adec75d6eb8bc3ef29c6b0.tar.xz yuzu-92dd496fb94385aa16adec75d6eb8bc3ef29c6b0.tar.zst yuzu-92dd496fb94385aa16adec75d6eb8bc3ef29c6b0.zip |
Diffstat (limited to 'src/core/file_sys/vfs_concat.h')
-rw-r--r-- | src/core/file_sys/vfs_concat.h | 44 |
1 files changed, 8 insertions, 36 deletions
diff --git a/src/core/file_sys/vfs_concat.h b/src/core/file_sys/vfs_concat.h index 76211d38a..c90f9d5d1 100644 --- a/src/core/file_sys/vfs_concat.h +++ b/src/core/file_sys/vfs_concat.h @@ -7,26 +7,27 @@ #include <map> #include <memory> #include <string_view> -#include <boost/container/flat_map.hpp> #include "core/file_sys/vfs.h" -#include "core/file_sys/vfs_static.h" namespace FileSys { // 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 name); - - template <u8 filler_byte> - friend VirtualFile ConcatenateFiles(std::map<u64, VirtualFile> files, std::string name); - ConcatenatedVfsFile(std::vector<VirtualFile> files, std::string name); ConcatenatedVfsFile(std::map<u64, VirtualFile> files, std::string name); public: ~ConcatenatedVfsFile() override; + /// Wrapper function to allow for more efficient handling of files.size() == 0, 1 cases. + static VirtualFile MakeConcatenatedFile(std::vector<VirtualFile> files, std::string name); + + /// Convenience function that turns a map of offsets to files into a concatenated file, filling + /// gaps with a given filler byte. + static VirtualFile MakeConcatenatedFile(u8 filler_byte, std::map<u64, VirtualFile> files, + std::string name); + std::string GetName() const override; std::size_t GetSize() const override; bool Resize(std::size_t new_size) override; @@ -43,33 +44,4 @@ private: std::string name; }; -// Wrapper function to allow for more efficient handling of files.size() == 0, 1 cases. -VirtualFile ConcatenateFiles(std::vector<VirtualFile> files, std::string name); - -// Convenience function that turns a map of offsets to files into a concatenated file, filling gaps -// with template parameter. -template <u8 filler_byte> -VirtualFile ConcatenateFiles(std::map<u64, VirtualFile> files, std::string name) { - if (files.empty()) - return nullptr; - if (files.size() == 1) - return files.begin()->second; - - const auto last_valid = --files.end(); - for (auto iter = files.begin(); iter != last_valid;) { - const auto old = iter++; - if (old->first + old->second->GetSize() != iter->first) { - files.emplace(old->first + old->second->GetSize(), - std::make_shared<StaticVfsFile<filler_byte>>(iter->first - old->first - - old->second->GetSize())); - } - } - - // Ensure the map starts at offset 0 (start of file), otherwise pad to fill. - if (files.begin()->first != 0) - files.emplace(0, std::make_shared<StaticVfsFile<filler_byte>>(files.begin()->first)); - - return std::shared_ptr<VfsFile>(new ConcatenatedVfsFile(std::move(files), std::move(name))); -} - } // namespace FileSys |