56 lines
1.4 KiB
C++
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)
|