aboutsummaryrefslogtreecommitdiff
path: root/src/core/file_sys/vfs_concat.h
diff options
context:
space:
mode:
authorLioncash <mathew1800@gmail.com>2018-09-25 17:26:09 -0400
committerLioncash <mathew1800@gmail.com>2018-09-25 17:40:53 -0400
commit14e2df56101f7c7ab87939ea7a708ab4e6fb70c6 (patch)
tree767c4a2d64f4f0392646720eeb5ad98e9898469b /src/core/file_sys/vfs_concat.h
parent7b81e1e52565ee867c285e2b0c2526f8d4b82581 (diff)
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.
Diffstat (limited to 'src/core/file_sys/vfs_concat.h')
-rw-r--r--src/core/file_sys/vfs_concat.h33
1 files changed, 4 insertions, 29 deletions
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 <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 {
@@ -17,9 +15,8 @@ namespace FileSys {
// 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);
+ friend VirtualFile ConcatenateFiles(u8 filler_byte, 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);
@@ -47,29 +44,7 @@ private:
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)));
-}
+// with a given filler byte.
+VirtualFile ConcatenateFiles(u8 filler_byte, std::map<u64, VirtualFile> files, std::string name);
} // namespace FileSys