#pragma once #include #include #include #include "Utils/ClassUtils.h" #include "Domain/Definition/BaseTypeDefinition.h" #include "Domain/Definition/DataDefinition.h" #include "Domain/Definition/EnumMember.h" #include "Domain/Definition/ForwardDeclaration.h" #include "Utils/NamespaceBuilder.h" #include "Parsing/Header/Block/IHeaderBlock.h" #include "Persistence/IDataRepository.h" class IHeaderBlock; class HeaderParserState { std::vector> m_header_definitions; std::stack> m_blocks; std::unordered_map m_definitions; std::unordered_map m_enum_members; std::unordered_map> m_forward_declarations; void AddBaseDataType(const BaseTypeDefinition* baseType); public: NamespaceBuilder m_namespace; HeaderParserState(); _NODISCARD IHeaderBlock* GetBlock() const; void PushBlock(std::unique_ptr block); void PopBlock(); void AddDataType(std::unique_ptr definition); void AddForwardDeclaration(std::unique_ptr forwardDeclaration); const DataDefinition* FindType(const std::string& typeName); EnumMember* FindEnumMember(const std::string& enumMemberName); void SaveToRepository(IDataRepository* repository); };