#pragma once #include "Persistence/IDataRepository.h" #include class InMemoryRepository final : public IDataRepository { public: InMemoryRepository(); ~InMemoryRepository() override; InMemoryRepository(const InMemoryRepository& other) = delete; InMemoryRepository(InMemoryRepository&& other) noexcept = default; InMemoryRepository& operator=(const InMemoryRepository& other) = delete; InMemoryRepository& operator=(InMemoryRepository&& other) noexcept = default; void Add(std::unique_ptr enumsDefinition) override; void Add(std::unique_ptr structDefinition) override; void Add(std::unique_ptr unionDefinition) override; void Add(std::unique_ptr typedefDefinition) override; void Add(std::unique_ptr structureInformation) override; void Add(std::unique_ptr fastFileBlock) override; [[nodiscard]] const std::string& GetGameName() const override; void SetGame(std::string gameName) override; [[nodiscard]] Architecture GetArchitecture() const override; void SetArchitecture(Architecture architecture) override; [[nodiscard]] const std::vector& GetAllEnums() const override; [[nodiscard]] const std::vector& GetAllStructs() const override; [[nodiscard]] const std::vector& GetAllUnions() const override; [[nodiscard]] const std::vector& GetAllTypedefs() const override; [[nodiscard]] const std::vector& GetAllStructureInformation() const override; [[nodiscard]] const std::vector& GetAllFastFileBlocks() const override; [[nodiscard]] DataDefinition* GetDataDefinitionByName(const std::string& name) const override; [[nodiscard]] StructureInformation* GetInformationFor(const DefinitionWithMembers* definitionWithMembers) const override; [[nodiscard]] EnumMember* GetEnumMemberByName(const std::string& name) const override; [[nodiscard]] const FastFileBlock* GetFastFileBlockByName(const std::string& name) const override; private: std::vector m_enums; std::vector m_structs; std::vector m_unions; std::vector m_typedefs; std::vector m_structures_information; std::vector m_fast_file_blocks; std::map m_data_definitions_by_name; std::map m_enum_members_by_name; std::map m_fast_file_blocks_by_name; std::map m_structure_information_by_definition; std::string m_game_name; Architecture m_architecture; };