diff --git a/src/ZoneCodeGeneratorNew/Persistence/IDataRepository.h b/src/ZoneCodeGeneratorNew/Persistence/IDataRepository.h index 0cd985c5..244402cb 100644 --- a/src/ZoneCodeGeneratorNew/Persistence/IDataRepository.h +++ b/src/ZoneCodeGeneratorNew/Persistence/IDataRepository.h @@ -4,24 +4,36 @@ #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; - /* - * IEnumerable GetAllEnums(); - IEnumerable GetAllStructs(); - IEnumerable GetAllUnions(); - IEnumerable GetAllTypedefs(); - IEnumerable GetAllStructureInformation(); - IEnumerable GetAllFastFileBlocks(); - */ - _NODISCARD const std::vector& GetAllEnums() const; - _NODISCARD const std::vector& GetAllStructs() const; - _NODISCARD const std::vector& GetAllUnions() const; - _NODISCARD const std::vector& GetAllTypedefs() const; - _NODISCARD const std::vector& GetAllStructureInformation() const; - _NODISCARD const std::vector& GetAllFastFileBlocks() const; + 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; }; diff --git a/src/ZoneCodeGeneratorNew/Persistence/InMemory/InMemoryRepository.cpp b/src/ZoneCodeGeneratorNew/Persistence/InMemory/InMemoryRepository.cpp index b0ab2a7d..b1e56be7 100644 --- a/src/ZoneCodeGeneratorNew/Persistence/InMemory/InMemoryRepository.cpp +++ b/src/ZoneCodeGeneratorNew/Persistence/InMemory/InMemoryRepository.cpp @@ -1 +1,91 @@ -#include "InMemoryRepository.h" \ No newline at end of file +#include "InMemoryRepository.h" + +void InMemoryRepository::Add(std::unique_ptr enumsDefinition) +{ + auto* raw = enumsDefinition.release(); + m_enums.push_back(raw); + m_data_definitions_by_name[raw->m_name] = raw; +} + +void InMemoryRepository::Add(std::unique_ptr structDefinition) +{ + auto* raw = structDefinition.release(); + m_structs.push_back(raw); + m_data_definitions_by_name[raw->m_name] = raw; +} + +void InMemoryRepository::Add(std::unique_ptr unionDefinition) +{ + auto* raw = unionDefinition.release(); + m_unions.push_back(raw); + m_data_definitions_by_name[raw->m_name] = raw; +} + +void InMemoryRepository::Add(std::unique_ptr typedefDefinition) +{ + auto* raw = typedefDefinition.release(); + m_typedefs.push_back(raw); + m_data_definitions_by_name[raw->m_name] = raw; +} + +void InMemoryRepository::Add(std::unique_ptr structureInformation) +{ + auto* raw = structureInformation.release(); + m_structures_information.push_back(raw); + m_structure_information_by_definition[raw->m_definition] = raw; +} + +void InMemoryRepository::Add(std::unique_ptr fastFileBlock) +{ + m_fast_file_blocks.push_back(fastFileBlock.release()); +} + +const std::vector& InMemoryRepository::GetAllEnums() const +{ + return m_enums; +} + +const std::vector& InMemoryRepository::GetAllStructs() const +{ + return m_structs; +} + +const std::vector& InMemoryRepository::GetAllUnions() const +{ + return m_unions; +} + +const std::vector& InMemoryRepository::GetAllTypedefs() const +{ + return m_typedefs; +} + +const std::vector& InMemoryRepository::GetAllStructureInformation() const +{ + return m_structures_information; +} + +const std::vector& InMemoryRepository::GetAllFastFileBlocks() const +{ + return m_fast_file_blocks; +} + +DataDefinition* InMemoryRepository::GetDataDefinitionByName(const std::string& name) const +{ + const auto foundEntry = m_data_definitions_by_name.find(name); + + if (foundEntry != m_data_definitions_by_name.end()) + return foundEntry->second; + + return nullptr; +} + +StructureInformation* InMemoryRepository::GetInformationFor(DefinitionWithMembers* definitionWithMembers) const +{ + const auto foundEntry = m_structure_information_by_definition.find(definitionWithMembers); + + if (foundEntry != m_structure_information_by_definition.end()) + return foundEntry->second; + + return nullptr; +} diff --git a/src/ZoneCodeGeneratorNew/Persistence/InMemory/InMemoryRepository.h b/src/ZoneCodeGeneratorNew/Persistence/InMemory/InMemoryRepository.h index c70fbb5b..445ca0af 100644 --- a/src/ZoneCodeGeneratorNew/Persistence/InMemory/InMemoryRepository.h +++ b/src/ZoneCodeGeneratorNew/Persistence/InMemory/InMemoryRepository.h @@ -1,8 +1,35 @@ #pragma once + +#include + #include "Persistence/IDataRepository.h" class InMemoryRepository final : public IDataRepository { -public: + 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_structure_information_by_definition; +public: + 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::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(DefinitionWithMembers* definitionWithMembers) const override; };