#pragma once #include #include "FileDefinition.h" #include "exports.h" namespace craftlab::fakeraid { class IEngine { public: virtual ~IEngine() {}; virtual void DirExistsOrThrow() const =0; virtual std::vector GetRootPaths() const = 0; virtual std::vector GetPaths() const = 0; virtual std::deque GetCurrentDir() const =0; virtual bool SetWorkingDirectory(const std::vector& path) =0; virtual FileAndSumListByRepositoryIndex ListFiles() =0; virtual void ListFilesRecur(FileAndSumListByRepositoryIndex*, bool* threadStopping) =0; virtual size_t CountFilesRecur() =0; virtual void Cd(const std::string& dirName) =0; virtual std::string BuildCurrentDirPath(const std::string& root, const PathParts& pathParts) const = 0; virtual std::string BuildCurrentDirPath(const FileAndSum& file) const = 0; struct CopyInstruction { CopyInstruction() =default; CopyInstruction(const std::string& src, const std::string& dst): source(src), destination(dst) {} std::string source; std::string destination; }; virtual void RemoveFiles(const std::vector& paths) const = 0; virtual void RemoveDirs(const std::vector& paths) const = 0; virtual void CopyItems(const std::vector& itemsToCopy) const =0; }; class ENGINEAPI_EXPORT EngineManager { public: EngineManager() =delete; static IEngine* Open(const std::vector& paths); }; }