fsmitm_romfsbuild.h 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. // SPDX-FileCopyrightText: Copyright 2018 yuzu Emulator Project
  2. // SPDX-License-Identifier: GPL-2.0-or-later
  3. #pragma once
  4. #include <map>
  5. #include <memory>
  6. #include <string>
  7. #include "common/common_types.h"
  8. #include "core/file_sys/vfs.h"
  9. namespace FileSys {
  10. struct RomFSBuildDirectoryContext;
  11. struct RomFSBuildFileContext;
  12. struct RomFSDirectoryEntry;
  13. struct RomFSFileEntry;
  14. class RomFSBuildContext {
  15. public:
  16. explicit RomFSBuildContext(VirtualDir base, VirtualDir ext = nullptr);
  17. ~RomFSBuildContext();
  18. // This finalizes the context.
  19. std::multimap<u64, VirtualFile> Build();
  20. private:
  21. VirtualDir base;
  22. VirtualDir ext;
  23. std::shared_ptr<RomFSBuildDirectoryContext> root;
  24. std::map<std::string, std::shared_ptr<RomFSBuildDirectoryContext>, std::less<>> directories;
  25. std::map<std::string, std::shared_ptr<RomFSBuildFileContext>, std::less<>> files;
  26. u64 num_dirs = 0;
  27. u64 num_files = 0;
  28. u64 dir_table_size = 0;
  29. u64 file_table_size = 0;
  30. u64 dir_hash_table_size = 0;
  31. u64 file_hash_table_size = 0;
  32. u64 file_partition_size = 0;
  33. void VisitDirectory(VirtualDir filesys, VirtualDir ext_dir,
  34. std::shared_ptr<RomFSBuildDirectoryContext> parent);
  35. bool AddDirectory(std::shared_ptr<RomFSBuildDirectoryContext> parent_dir_ctx,
  36. std::shared_ptr<RomFSBuildDirectoryContext> dir_ctx);
  37. bool AddFile(std::shared_ptr<RomFSBuildDirectoryContext> parent_dir_ctx,
  38. std::shared_ptr<RomFSBuildFileContext> file_ctx);
  39. };
  40. } // namespace FileSys