From 14e2df56101f7c7ab87939ea7a708ab4e6fb70c6 Mon Sep 17 00:00:00 2001 From: Lioncash Date: Tue, 25 Sep 2018 17:26:09 -0400 Subject: vfs_static: Remove template byte parameter from StaticVfsFile This converts it into a regular constructor parameter. There's no need to make this a template parameter on the class when it functions perfectly well as a constructor argument. This also reduces the amount of code bloat produced by the compiler, as it doesn't need to generate the same code for multiple different instantiations of the same class type, but with a different fill value. --- src/core/file_sys/romfs.cpp | 2 +- src/core/file_sys/vfs_concat.cpp | 42 +++++++++++++++++++++++++++++++--------- src/core/file_sys/vfs_concat.h | 33 ++++--------------------------- src/core/file_sys/vfs_static.h | 7 ++++--- 4 files changed, 42 insertions(+), 42 deletions(-) (limited to 'src/core/file_sys') diff --git a/src/core/file_sys/romfs.cpp b/src/core/file_sys/romfs.cpp index 205284a4d..7804ef56d 100644 --- a/src/core/file_sys/romfs.cpp +++ b/src/core/file_sys/romfs.cpp @@ -134,7 +134,7 @@ VirtualFile CreateRomFS(VirtualDir dir) { return nullptr; RomFSBuildContext ctx{dir}; - return ConcatenateFiles<0>(ctx.Build(), dir->GetName()); + return ConcatenateFiles(0, ctx.Build(), dir->GetName()); } } // namespace FileSys diff --git a/src/core/file_sys/vfs_concat.cpp b/src/core/file_sys/vfs_concat.cpp index d9f9911da..8a0df508e 100644 --- a/src/core/file_sys/vfs_concat.cpp +++ b/src/core/file_sys/vfs_concat.cpp @@ -7,6 +7,7 @@ #include "common/assert.h" #include "core/file_sys/vfs_concat.h" +#include "core/file_sys/vfs_static.h" namespace FileSys { @@ -22,15 +23,6 @@ static bool VerifyConcatenationMapContinuity(const std::map& m return map.begin()->first == 0; } -VirtualFile ConcatenateFiles(std::vector files, std::string name) { - if (files.empty()) - return nullptr; - if (files.size() == 1) - return files[0]; - - return std::shared_ptr(new ConcatenatedVfsFile(std::move(files), std::move(name))); -} - ConcatenatedVfsFile::ConcatenatedVfsFile(std::vector files_, std::string name) : name(std::move(name)) { std::size_t next_offset = 0; @@ -109,4 +101,36 @@ bool ConcatenatedVfsFile::Rename(std::string_view name) { return false; } +VirtualFile ConcatenateFiles(std::vector files, std::string name) { + if (files.empty()) + return nullptr; + if (files.size() == 1) + return files[0]; + + return std::shared_ptr(new ConcatenatedVfsFile(std::move(files), std::move(name))); +} + +VirtualFile ConcatenateFiles(u8 filler_byte, std::map 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(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(filler_byte, files.begin()->first)); + + return std::shared_ptr(new ConcatenatedVfsFile(std::move(files), std::move(name))); +} + } // namespace FileSys diff --git a/src/core/file_sys/vfs_concat.h b/src/core/file_sys/vfs_concat.h index 76211d38a..17fa40ade 100644 --- a/src/core/file_sys/vfs_concat.h +++ b/src/core/file_sys/vfs_concat.h @@ -7,9 +7,7 @@ #include #include #include -#include #include "core/file_sys/vfs.h" -#include "core/file_sys/vfs_static.h" namespace FileSys { @@ -17,9 +15,8 @@ namespace FileSys { // read-only. class ConcatenatedVfsFile : public VfsFile { friend VirtualFile ConcatenateFiles(std::vector files, std::string name); - - template - friend VirtualFile ConcatenateFiles(std::map files, std::string name); + friend VirtualFile ConcatenateFiles(u8 filler_byte, std::map files, + std::string name); ConcatenatedVfsFile(std::vector files, std::string name); ConcatenatedVfsFile(std::map files, std::string name); @@ -47,29 +44,7 @@ private: VirtualFile ConcatenateFiles(std::vector files, std::string name); // Convenience function that turns a map of offsets to files into a concatenated file, filling gaps -// with template parameter. -template -VirtualFile ConcatenateFiles(std::map 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>(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>(files.begin()->first)); - - return std::shared_ptr(new ConcatenatedVfsFile(std::move(files), std::move(name))); -} +// with a given filler byte. +VirtualFile ConcatenateFiles(u8 filler_byte, std::map files, std::string name); } // namespace FileSys diff --git a/src/core/file_sys/vfs_static.h b/src/core/file_sys/vfs_static.h index 4dd47ffcc..8ad77d300 100644 --- a/src/core/file_sys/vfs_static.h +++ b/src/core/file_sys/vfs_static.h @@ -12,11 +12,11 @@ namespace FileSys { -template class StaticVfsFile : public VfsFile { public: - explicit StaticVfsFile(size_t size = 0, std::string name = "", VirtualDir parent = nullptr) - : size(size), name(std::move(name)), parent(std::move(parent)) {} + explicit StaticVfsFile(u8 value, size_t size = 0, std::string name = "", + VirtualDir parent = nullptr) + : value{value}, size{size}, name{std::move(name)}, parent{std::move(parent)} {} std::string GetName() const override { return name; @@ -70,6 +70,7 @@ public: } private: + u8 value; size_t size; std::string name; VirtualDir parent; -- cgit v1.2.3