#pragma once #include #include "Utils/ClassUtils.h" #include "Domain/Definition/EnumDefinition.h" #include "Domain/Definition/StructDefinition.h" #include "Domain/Definition/TypedefDefinition.h" #include "Domain/Definition/UnionDefinition.h" #include "Domain/Information/StructureInformation.h" #include "Domain/FastFile/FastFileBlock.h" class IDataRepository { public: IDataRepository() = default; virtual ~IDataRepository() = default; IDataRepository(const IDataRepository& other) = default; IDataRepository(IDataRepository&& other) noexcept = default; IDataRepository& operator=(const IDataRepository& other) = default; IDataRepository& operator=(IDataRepository&& other) noexcept = default; virtual void Add(std::unique_ptr enumsDefinition) = 0; virtual void Add(std::unique_ptr structDefinition) = 0; virtual void Add(std::unique_ptr unionDefinition) = 0; virtual void Add(std::unique_ptr typedefDefinition) = 0; virtual void Add(std::unique_ptr structureInformation) = 0; virtual void Add(std::unique_ptr fastFileBlock) = 0; _NODISCARD virtual const std::vector& GetAllEnums() const = 0; _NODISCARD virtual const std::vector& GetAllStructs() const = 0; _NODISCARD virtual const std::vector& GetAllUnions() const = 0; _NODISCARD virtual const std::vector& GetAllTypedefs() const = 0; _NODISCARD virtual const std::vector& GetAllStructureInformation() const = 0; _NODISCARD virtual const std::vector& GetAllFastFileBlocks() const = 0; _NODISCARD virtual DataDefinition* GetDataDefinitionByName(const std::string& name) const = 0; _NODISCARD virtual StructureInformation* GetInformationFor(DefinitionWithMembers* definitionWithMembers) const = 0; };