summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGravatar Lioncash2018-09-25 17:26:09 -0400
committerGravatar Lioncash2018-09-25 17:40:53 -0400
commit14e2df56101f7c7ab87939ea7a708ab4e6fb70c6 (patch)
tree767c4a2d64f4f0392646720eeb5ad98e9898469b /src
parentMerge pull request #1365 from DarkLordZach/lfs (diff)
downloadyuzu-14e2df56101f7c7ab87939ea7a708ab4e6fb70c6.tar.gz
yuzu-14e2df56101f7c7ab87939ea7a708ab4e6fb70c6.tar.xz
yuzu-14e2df56101f7c7ab87939ea7a708ab4e6fb70c6.zip
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')
-rw-r--r--src/core/file_sys/romfs.cpp2
-rw-r--r--src/core/file_sys/vfs_concat.cpp42
-rw-r--r--src/core/file_sys/vfs_concat.h33
-rw-r--r--src/core/file_sys/vfs_static.h7
4 files changed, 42 insertions, 42 deletions
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) {
134 return nullptr; 134 return nullptr;
135 135
136 RomFSBuildContext ctx{dir}; 136 RomFSBuildContext ctx{dir};
137 return ConcatenateFiles<0>(ctx.Build(), dir->GetName()); 137 return ConcatenateFiles(0, ctx.Build(), dir->GetName());
138} 138}
139 139
140} // namespace FileSys 140} // 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 @@
7 7
8#include "common/assert.h" 8#include "common/assert.h"
9#include "core/file_sys/vfs_concat.h" 9#include "core/file_sys/vfs_concat.h"
10#include "core/file_sys/vfs_static.h"
10 11
11namespace FileSys { 12namespace FileSys {
12 13
@@ -22,15 +23,6 @@ static bool VerifyConcatenationMapContinuity(const std::map<u64, VirtualFile>& m
22 return map.begin()->first == 0; 23 return map.begin()->first == 0;
23} 24}
24 25
25VirtualFile ConcatenateFiles(std::vector<VirtualFile> files, std::string name) {
26 if (files.empty())
27 return nullptr;
28 if (files.size() == 1)
29 return files[0];
30
31 return std::shared_ptr<VfsFile>(new ConcatenatedVfsFile(std::move(files), std::move(name)));
32}
33
34ConcatenatedVfsFile::ConcatenatedVfsFile(std::vector<VirtualFile> files_, std::string name) 26ConcatenatedVfsFile::ConcatenatedVfsFile(std::vector<VirtualFile> files_, std::string name)
35 : name(std::move(name)) { 27 : name(std::move(name)) {
36 std::size_t next_offset = 0; 28 std::size_t next_offset = 0;
@@ -109,4 +101,36 @@ bool ConcatenatedVfsFile::Rename(std::string_view name) {
109 return false; 101 return false;
110} 102}
111 103
104VirtualFile ConcatenateFiles(std::vector<VirtualFile> files, std::string name) {
105 if (files.empty())
106 return nullptr;
107 if (files.size() == 1)
108 return files[0];
109
110 return std::shared_ptr<VfsFile>(new ConcatenatedVfsFile(std::move(files), std::move(name)));
111}
112
113VirtualFile ConcatenateFiles(u8 filler_byte, std::map<u64, VirtualFile> files, std::string name) {
114 if (files.empty())
115 return nullptr;
116 if (files.size() == 1)
117 return files.begin()->second;
118
119 const auto last_valid = --files.end();
120 for (auto iter = files.begin(); iter != last_valid;) {
121 const auto old = iter++;
122 if (old->first + old->second->GetSize() != iter->first) {
123 files.emplace(old->first + old->second->GetSize(),
124 std::make_shared<StaticVfsFile>(filler_byte, iter->first - old->first -
125 old->second->GetSize()));
126 }
127 }
128
129 // Ensure the map starts at offset 0 (start of file), otherwise pad to fill.
130 if (files.begin()->first != 0)
131 files.emplace(0, std::make_shared<StaticVfsFile>(filler_byte, files.begin()->first));
132
133 return std::shared_ptr<VfsFile>(new ConcatenatedVfsFile(std::move(files), std::move(name)));
134}
135
112} // namespace FileSys 136} // 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 @@
7#include <map> 7#include <map>
8#include <memory> 8#include <memory>
9#include <string_view> 9#include <string_view>
10#include <boost/container/flat_map.hpp>
11#include "core/file_sys/vfs.h" 10#include "core/file_sys/vfs.h"
12#include "core/file_sys/vfs_static.h"
13 11
14namespace FileSys { 12namespace FileSys {
15 13
@@ -17,9 +15,8 @@ namespace FileSys {
17// read-only. 15// read-only.
18class ConcatenatedVfsFile : public VfsFile { 16class ConcatenatedVfsFile : public VfsFile {
19 friend VirtualFile ConcatenateFiles(std::vector<VirtualFile> files, std::string name); 17 friend VirtualFile ConcatenateFiles(std::vector<VirtualFile> files, std::string name);
20 18 friend VirtualFile ConcatenateFiles(u8 filler_byte, std::map<u64, VirtualFile> files,
21 template <u8 filler_byte> 19 std::string name);
22 friend VirtualFile ConcatenateFiles(std::map<u64, VirtualFile> files, std::string name);
23 20
24 ConcatenatedVfsFile(std::vector<VirtualFile> files, std::string name); 21 ConcatenatedVfsFile(std::vector<VirtualFile> files, std::string name);
25 ConcatenatedVfsFile(std::map<u64, VirtualFile> files, std::string name); 22 ConcatenatedVfsFile(std::map<u64, VirtualFile> files, std::string name);
@@ -47,29 +44,7 @@ private:
47VirtualFile ConcatenateFiles(std::vector<VirtualFile> files, std::string name); 44VirtualFile ConcatenateFiles(std::vector<VirtualFile> files, std::string name);
48 45
49// Convenience function that turns a map of offsets to files into a concatenated file, filling gaps 46// Convenience function that turns a map of offsets to files into a concatenated file, filling gaps
50// with template parameter. 47// with a given filler byte.
51template <u8 filler_byte> 48VirtualFile ConcatenateFiles(u8 filler_byte, std::map<u64, VirtualFile> files, std::string name);
52VirtualFile ConcatenateFiles(std::map<u64, VirtualFile> files, std::string name) {
53 if (files.empty())
54 return nullptr;
55 if (files.size() == 1)
56 return files.begin()->second;
57
58 const auto last_valid = --files.end();
59 for (auto iter = files.begin(); iter != last_valid;) {
60 const auto old = iter++;
61 if (old->first + old->second->GetSize() != iter->first) {
62 files.emplace(old->first + old->second->GetSize(),
63 std::make_shared<StaticVfsFile<filler_byte>>(iter->first - old->first -
64 old->second->GetSize()));
65 }
66 }
67
68 // Ensure the map starts at offset 0 (start of file), otherwise pad to fill.
69 if (files.begin()->first != 0)
70 files.emplace(0, std::make_shared<StaticVfsFile<filler_byte>>(files.begin()->first));
71
72 return std::shared_ptr<VfsFile>(new ConcatenatedVfsFile(std::move(files), std::move(name)));
73}
74 49
75} // namespace FileSys 50} // 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 @@
12 12
13namespace FileSys { 13namespace FileSys {
14 14
15template <u8 value>
16class StaticVfsFile : public VfsFile { 15class StaticVfsFile : public VfsFile {
17public: 16public:
18 explicit StaticVfsFile(size_t size = 0, std::string name = "", VirtualDir parent = nullptr) 17 explicit StaticVfsFile(u8 value, size_t size = 0, std::string name = "",
19 : size(size), name(std::move(name)), parent(std::move(parent)) {} 18 VirtualDir parent = nullptr)
19 : value{value}, size{size}, name{std::move(name)}, parent{std::move(parent)} {}
20 20
21 std::string GetName() const override { 21 std::string GetName() const override {
22 return name; 22 return name;
@@ -70,6 +70,7 @@ public:
70 } 70 }
71 71
72private: 72private:
73 u8 value;
73 size_t size; 74 size_t size;
74 std::string name; 75 std::string name;
75 VirtualDir parent; 76 VirtualDir parent;