#pragma once #include #include #include namespace ntd { namespace n3ds { struct RomFsSnapshotGenerator : public tc::io::VirtualFileSystem::FileSystemSnapshot { public: RomFsSnapshotGenerator(const std::shared_ptr& stream); private: RomFsSnapshotGenerator(); std::shared_ptr mBaseStream; int64_t mDataOffset; tc::ByteData mDirEntryTable; std::map mDirParentVaddrMap; inline ntd::n3ds::RomFsDirectoryEntry* getDirEntry(uint32_t vaddr) { return (ntd::n3ds::RomFsDirectoryEntry*)(mDirEntryTable.data() + vaddr); } tc::ByteData mFileEntryTable; inline ntd::n3ds::RomFsFileEntry* getFileEntry(uint32_t vaddr) { return (ntd::n3ds::RomFsFileEntry*)(mFileEntryTable.data() + vaddr); } void addFile(const ntd::n3ds::RomFsFileEntry* file_entry, size_t parent_dir); void addDirectory(const ntd::n3ds::RomFsDirectoryEntry* dir_entry, size_t parent_dir); }; }} // namespace ntd::n3ds