56 lines
1.4 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:
fs::path getHomeFolder() override;
std::vector<FileInfo> listFiles(const fs::path& folder) override;
FileInfo getFileInfo(const fs::path& file) override;
Optional<fs::path> getNativePath(const fs::path& file) override;
StreamError open(const fs::path& path, FileOpenMode mode, std::unique_ptr<Stream>& outStream) override;
void getAllPaths(const fs::path &path, std::vector<PathReference> &outPaths) override;
using FileSystemAdapter::getAllPaths;
inline FileSystemAdapter* addAdapter(std::unique_ptr<FileSystemAdapter>&& adapter) {
adapters_.push_back(std::move(adapter));
return adapters_.back().get();
}
template<typename TAdapter, typename... TArgs>
inline TAdapter* emplaceAdapter(TArgs&&... args) {
return static_cast<TAdapter*>(addAdapter(std::make_unique<TAdapter>(std::forward<TArgs>(args)...)));
}
};
//
// public functions
//
} // namespace mijin
#endif // !defined(MIJIN_VIRTUAL_FILESYSTEM_STACKED_HPP_INCLUDED)