#pragma once #if !defined(MIJIN_VIRTUAL_FILESYSTEM_STACKED_HPP_INCLUDED) #define MIJIN_VIRTUAL_FILESYSTEM_STACKED_HPP_INCLUDED 1 #include #include #include "./filesystem.hpp" namespace mijin { // // public defines // // // public constants // // // public types // class StackedFileSystemAdapter : public FileSystemAdapter { private: std::vector> adapters_; public: std::vector listFiles(PathView folder) override; FileInfo getFileInfo(PathView file) override; Optional getNativePath(PathView file) override; StreamError open(PathView path, FileOpenMode mode, std::unique_ptr& outStream) override; void getAllPaths(PathView path, std::vector &outPaths) override; using FileSystemAdapter::getAllPaths; inline FileSystemAdapter* addAdapter(std::unique_ptr&& adapter) { adapters_.push_back(std::move(adapter)); return adapters_.back().get(); } template inline TAdapter* emplaceAdapter(TArgs&&... args) { return static_cast(addAdapter(std::make_unique(std::forward(args)...))); } }; // // public functions // } // namespace mijin #endif // !defined(MIJIN_VIRTUAL_FILESYSTEM_STACKED_HPP_INCLUDED)