|
|
@@ -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
|