summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLioncash <mathew1800@gmail.com>2018-09-25 23:26:09 +0200
committerLioncash <mathew1800@gmail.com>2018-09-25 23:40:53 +0200
commit14e2df56101f7c7ab87939ea7a708ab4e6fb70c6 (patch)
tree767c4a2d64f4f0392646720eeb5ad98e9898469b
parentMerge pull request #1365 from DarkLordZach/lfs (diff)
downloadyuzu-14e2df56101f7c7ab87939ea7a708ab4e6fb70c6.tar
yuzu-14e2df56101f7c7ab87939ea7a708ab4e6fb70c6.tar.gz
yuzu-14e2df56101f7c7ab87939ea7a708ab4e6fb70c6.tar.bz2
yuzu-14e2df56101f7c7ab87939ea7a708ab4e6fb70c6.tar.lz
yuzu-14e2df56101f7c7ab87939ea7a708ab4e6fb70c6.tar.xz
yuzu-14e2df56101f7c7ab87939ea7a708ab4e6fb70c6.tar.zst
yuzu-14e2df56101f7c7ab87939ea7a708ab4e6fb70c6.zip
-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) {
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<u64, VirtualFile>& m
return map.begin()->first == 0;
}
-VirtualFile ConcatenateFiles(std::vector<VirtualFile> files, std::string name) {
- if (files.empty())
- return nullptr;
- if (files.size() == 1)
- return files[0];
-
- return std::shared_ptr<VfsFile>(new ConcatenatedVfsFile(std::move(files), std::move(name)));
-}
-
ConcatenatedVfsFile::ConcatenatedVfsFile(std::vector<VirtualFile> 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<VirtualFile> files, std::string name) {
+ if (files.empty())
+ return nullptr;
+ if (files.size() == 1)
+ return files[0];
+
+ return std::shared_ptr<VfsFile>(new ConcatenatedVfsFile(std::move(files), std::move(name)));
+}
+
+VirtualFile ConcatenateFiles(u8 filler_byte, 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
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
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 <u8 value>
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;