diff options
Diffstat (limited to 'src/core/file_sys')
| -rw-r--r-- | src/core/file_sys/romfs.cpp | 2 | ||||
| -rw-r--r-- | src/core/file_sys/vfs_concat.cpp | 42 | ||||
| -rw-r--r-- | src/core/file_sys/vfs_concat.h | 33 | ||||
| -rw-r--r-- | src/core/file_sys/vfs_static.h | 7 | 
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; | 
