fileDiff.h 1.1 KB

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