fileDiff.h 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. #pragma once
  2. #include <optional>
  3. #include "exports.h"
  4. #include "FileDefinition.h"
  5. namespace craftlab::fakeraid
  6. {
  7. class IEngine;
  8. struct DiffResult
  9. {
  10. std::map<std::string, std::vector<bool>> missingDirs;
  11. std::map<std::string, std::vector<bool>> missingFiles;
  12. std::map<std::string, std::vector<int>> differentFiles; // fileName -> { versionId, versionId, versionId }
  13. std::vector<File> correctFiles;
  14. std::map<std::string, FileAndSum> FileList;
  15. ENGINEAPI_EXPORT bool HasError() const;
  16. };
  17. class ENGINEAPI_EXPORT FileDiff
  18. {
  19. public:
  20. FileDiff();
  21. ~FileDiff();
  22. DiffResult Process(const IEngine& engine, const FileAndSumListByRepositoryIndex& fileList);
  23. private:
  24. typedef std::optional<FileAndSum> OptionalFileAndSum;
  25. typedef std::vector<OptionalFileAndSum> ListOfOptionalFileAndSum;
  26. typedef std::map<std::string, ListOfOptionalFileAndSum> FileVersionList;
  27. FileVersionList GroupBy(const IEngine& engine, const FileAndSumListByRepositoryIndex& fileList, size_t indexCount);
  28. std::vector<int> computeVersionIds(const ListOfOptionalFileAndSum& versions);
  29. void CheckVersions(DiffResult& output, const std::string& fileKey, const ListOfOptionalFileAndSum& versions);
  30. };
  31. }