Added MemoryFileSystemAdapter.
This commit is contained in:
55
source/mijin/virtual_filesystem/memory.hpp
Normal file
55
source/mijin/virtual_filesystem/memory.hpp
Normal file
@@ -0,0 +1,55 @@
|
||||
|
||||
#pragma once
|
||||
|
||||
#if !defined(MIJIN_SOURCE_MIJIN_VIRTUAL_FILESYSTEM_MEMORY_HPP_INCLUDED)
|
||||
#define MIJIN_SOURCE_MIJIN_VIRTUAL_FILESYSTEM_MEMORY_HPP_INCLUDED 1
|
||||
|
||||
#include <variant>
|
||||
#include <vector>
|
||||
|
||||
#include "../container/vector_map.hpp"
|
||||
#include "../util/flag.hpp"
|
||||
#include "../virtual_filesystem/filesystem.hpp"
|
||||
|
||||
namespace mijin
|
||||
{
|
||||
namespace detail
|
||||
{
|
||||
struct MemoryFile
|
||||
{
|
||||
std::span<const std::uint8_t> data;
|
||||
};
|
||||
struct MemoryFolder
|
||||
{
|
||||
VectorMap<std::string, MemoryFile> files;
|
||||
VectorMap<std::string, MemoryFolder> folders;
|
||||
};
|
||||
}
|
||||
|
||||
class MemoryFileSystemAdapter : public FileSystemAdapter
|
||||
{
|
||||
public:
|
||||
MIJIN_DEFINE_FLAG(Overwrite);
|
||||
MIJIN_DEFINE_FLAG(CopyData);
|
||||
private:
|
||||
detail::MemoryFolder root_;
|
||||
std::vector<std::vector<std::uint8_t>> fileData_;
|
||||
public:
|
||||
[[nodiscard]] std::vector<FileInfo> listFiles(const fs::path& folder) override;
|
||||
[[nodiscard]] FileInfo getFileInfo(const fs::path& file) override;
|
||||
[[nodiscard]] StreamError open(const fs::path& path, FileOpenMode mode, std::unique_ptr<Stream>& outStream) override;
|
||||
|
||||
bool addFile(const fs::path& path, std::span<const std::uint8_t> data, Overwrite overwrite = Overwrite::NO, CopyData copyData = CopyData::NO);
|
||||
bool addFile(const fs::path& path, std::span<const std::uint8_t> data, CopyData copyData)
|
||||
{
|
||||
return addFile(path, data, Overwrite::NO, copyData);
|
||||
}
|
||||
void addFolder(const fs::path& path);
|
||||
private:
|
||||
detail::MemoryFolder* findFolder(const fs::path& path, bool create = false) MIJIN_NOEXCEPT;
|
||||
FileInfo folderInfo(const fs::path& path, const detail::MemoryFolder& folder) const MIJIN_NOEXCEPT;
|
||||
FileInfo fileInfo(const fs::path& path, const detail::MemoryFile& file) const MIJIN_NOEXCEPT;
|
||||
};
|
||||
} // namespace mijin
|
||||
|
||||
#endif // !defined(MIJIN_SOURCE_MIJIN_VIRTUAL_FILESYSTEM_MEMORY_HPP_INCLUDED)
|
||||
Reference in New Issue
Block a user