From 83b7cd77c77c64b30662da0cb8c80fc7051f741b Mon Sep 17 00:00:00 2001 From: Jan Date: Thu, 18 Feb 2021 18:29:17 +0100 Subject: [PATCH] add parsed definitions to repostiory --- .../Parsing/Header/Impl/HeaderParser.cpp | 4 +-- .../Parsing/Header/Impl/HeaderParser.h | 2 +- .../Parsing/Header/Impl/HeaderParserState.cpp | 28 +++++++++++++++++++ .../Parsing/Header/Impl/HeaderParserState.h | 3 ++ 4 files changed, 34 insertions(+), 3 deletions(-) diff --git a/src/ZoneCodeGeneratorLib/Parsing/Header/Impl/HeaderParser.cpp b/src/ZoneCodeGeneratorLib/Parsing/Header/Impl/HeaderParser.cpp index f469b52b..31d3c3ac 100644 --- a/src/ZoneCodeGeneratorLib/Parsing/Header/Impl/HeaderParser.cpp +++ b/src/ZoneCodeGeneratorLib/Parsing/Header/Impl/HeaderParser.cpp @@ -13,7 +13,7 @@ const std::vector& HeaderParser::GetTestsForState() return m_state->GetBlock()->GetTestsForBlock(); } -void HeaderParser::SaveToRepository(IDataRepository* repository) +void HeaderParser::SaveToRepository(IDataRepository* repository) const { - + return m_state->SaveToRepository(repository); } diff --git a/src/ZoneCodeGeneratorLib/Parsing/Header/Impl/HeaderParser.h b/src/ZoneCodeGeneratorLib/Parsing/Header/Impl/HeaderParser.h index c06bf75f..1e17019d 100644 --- a/src/ZoneCodeGeneratorLib/Parsing/Header/Impl/HeaderParser.h +++ b/src/ZoneCodeGeneratorLib/Parsing/Header/Impl/HeaderParser.h @@ -13,5 +13,5 @@ protected: public: explicit HeaderParser(HeaderLexer* lexer); - void SaveToRepository(IDataRepository* repository); + void SaveToRepository(IDataRepository* repository) const; }; diff --git a/src/ZoneCodeGeneratorLib/Parsing/Header/Impl/HeaderParserState.cpp b/src/ZoneCodeGeneratorLib/Parsing/Header/Impl/HeaderParserState.cpp index b395be0a..c5004984 100644 --- a/src/ZoneCodeGeneratorLib/Parsing/Header/Impl/HeaderParserState.cpp +++ b/src/ZoneCodeGeneratorLib/Parsing/Header/Impl/HeaderParserState.cpp @@ -83,3 +83,31 @@ EnumMember* HeaderParserState::FindEnumMember(const std::string& enumMemberName) return nullptr; } + +void HeaderParserState::SaveToRepository(IDataRepository* repository) +{ + for(auto& definition : m_header_definitions) + { + switch(definition->GetType()) + { + case DataDefinitionType::ENUM: + repository->Add(std::unique_ptr(dynamic_cast(definition.release()))); + break; + + case DataDefinitionType::STRUCT: + repository->Add(std::unique_ptr(dynamic_cast(definition.release()))); + break; + + case DataDefinitionType::UNION: + repository->Add(std::unique_ptr(dynamic_cast(definition.release()))); + break; + + case DataDefinitionType::TYPEDEF: + repository->Add(std::unique_ptr(dynamic_cast(definition.release()))); + break; + + default: + break; + } + } +} diff --git a/src/ZoneCodeGeneratorLib/Parsing/Header/Impl/HeaderParserState.h b/src/ZoneCodeGeneratorLib/Parsing/Header/Impl/HeaderParserState.h index d944d2b3..8ac59773 100644 --- a/src/ZoneCodeGeneratorLib/Parsing/Header/Impl/HeaderParserState.h +++ b/src/ZoneCodeGeneratorLib/Parsing/Header/Impl/HeaderParserState.h @@ -11,6 +11,7 @@ #include "Domain/Definition/ForwardDeclaration.h" #include "Utils/NamespaceBuilder.h" #include "Parsing/Header/Block/IHeaderBlock.h" +#include "Persistence/IDataRepository.h" class IHeaderBlock; @@ -39,4 +40,6 @@ public: const DataDefinition* FindType(const std::string& typeName); EnumMember* FindEnumMember(const std::string& enumMemberName); + + void SaveToRepository(IDataRepository* repository); };