#pragma once #include #include "exports.h" #include "FileDefinition.h" namespace craftlab::fakeraid { class IEngine; struct DiffResult { std::map> missingDirs; std::map> missingFiles; std::map> differentFiles; // fileName -> { versionId, versionId, versionId } std::vector correctFiles; std::map FileList; ENGINEAPI_EXPORT bool HasError() const; }; class ENGINEAPI_EXPORT FileDiff { public: FileDiff(); ~FileDiff(); DiffResult Process(const IEngine& engine, const FileAndSumListByRepositoryIndex& fileList); private: typedef std::optional OptionalFileAndSum; typedef std::vector ListOfOptionalFileAndSum; typedef std::map FileVersionList; FileVersionList GroupBy(const IEngine& engine, const FileAndSumListByRepositoryIndex& fileList, size_t indexCount); std::vector computeVersionIds(const ListOfOptionalFileAndSum& versions); void CheckVersions(DiffResult& output, const std::string& fileKey, const ListOfOptionalFileAndSum& versions); }; }