55 lines
1.3 KiB
C++
55 lines
1.3 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<FolderEntry> listFiles(PathView folder) override;
|
|
FileInfo getFileInfo(PathView file) override;
|
|
Optional<NativePath> getNativePath(PathView file) override;
|
|
StreamError open(PathView path, FileOpenMode mode, std::unique_ptr<Stream>& outStream) override;
|
|
void getAllPaths(PathView 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)
|