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)
 |