2023-05-29 14:51:44 +02:00

53 lines
1.2 KiB
C++

#pragma once
#if !defined(MIJIN_VIRTUAL_FILESYSTEM_STACKED_HPP_INCLUDED)
#define MIJIN_VIRTUAL_FILESYSTEM_STACKED_HPP_INCLUDED 1
#include <memory>
#include <vector>
#include "./filesystem.hpp"
namespace mijin
{
//
// public defines
//
//
// public constants
//
//
// public types
//
class StackedFileSystemAdapter : public FileSystemAdapter
{
private:
std::vector<std::unique_ptr<FileSystemAdapter>> adapters_;
public:
std::vector<fs::path> getRoots() override;
fs::path getHomeFolder() override;
std::vector<FileInfo> listFiles(const fs::path& folder) override;
FileInfo getFileInfo(const fs::path& file) override;
StreamError open(const fs::path& path, FileOpenMode mode, std::unique_ptr<Stream>& outStream) override;
inline void addAdapter(std::unique_ptr<FileSystemAdapter>&& adapter) {
adapters_.push_back(std::move(adapter));
}
template<typename TAdapter, typename... TArgs>
inline void emplaceAdapter(TArgs&&... args) {
addAdapter(std::make_unique<TAdapter>(std::forward<TArgs>(args)...));
}
};
//
// public functions
//
} // namespace mijin
#endif // !defined(MIJIN_VIRTUAL_FILESYSTEM_STACKED_HPP_INCLUDED)