mirror of
https://github.com/zhaobot/yuzu.git
synced 2025-01-16 09:52:30 -03:00
14e2df5610
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.
50 lines
1.9 KiB
C++
50 lines
1.9 KiB
C++
// Copyright 2018 yuzu emulator team
|
|
// Licensed under GPLv2 or any later version
|
|
// Refer to the license.txt file included.
|
|
|
|
#pragma once
|
|
|
|
#include <map>
|
|
#include <memory>
|
|
#include <string_view>
|
|
#include "core/file_sys/vfs.h"
|
|
|
|
namespace FileSys {
|
|
|
|
// Class that wraps multiple vfs files and concatenates them, making reads seamless. Currently
|
|
// read-only.
|
|
class ConcatenatedVfsFile : public VfsFile {
|
|
friend VirtualFile ConcatenateFiles(std::vector<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);
|
|
|
|
public:
|
|
~ConcatenatedVfsFile() override;
|
|
|
|
std::string GetName() const override;
|
|
std::size_t GetSize() const override;
|
|
bool Resize(std::size_t new_size) override;
|
|
std::shared_ptr<VfsDirectory> GetContainingDirectory() const override;
|
|
bool IsWritable() const override;
|
|
bool IsReadable() const override;
|
|
std::size_t Read(u8* data, std::size_t length, std::size_t offset) const override;
|
|
std::size_t Write(const u8* data, std::size_t length, std::size_t offset) override;
|
|
bool Rename(std::string_view name) override;
|
|
|
|
private:
|
|
// Maps starting offset to file -- more efficient.
|
|
std::map<u64, VirtualFile> files;
|
|
std::string name;
|
|
};
|
|
|
|
// Wrapper function to allow for more efficient handling of files.size() == 0, 1 cases.
|
|
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 a given filler byte.
|
|
VirtualFile ConcatenateFiles(u8 filler_byte, std::map<u64, VirtualFile> files, std::string name);
|
|
|
|
} // namespace FileSys
|