Create default StructuredDataDef struct when none was specified so there is always a root struct

This commit is contained in:
Jan 2022-01-22 14:35:43 +01:00
parent 5327ce8ec9
commit f061ff91f5
2 changed files with 23 additions and 7 deletions

View File

@ -101,18 +101,34 @@ namespace sdd::def_scope_sequences
}); });
} }
protected: private:
void ProcessMatch(StructuredDataDefParserState* state, SequenceResult<SimpleParserValue>& result) const override static void CreateDefaultStructWhenNoStructsSpecified(const StructuredDataDefParserState* state)
{ {
assert(state->m_current_enum == nullptr); if (state->m_current_def->m_structs.empty())
assert(state->m_current_struct == nullptr); {
state->m_current_def->m_structs.emplace_back(std::make_unique<CommonStructuredDataDefStruct>());
state->m_current_def->m_root_type = CommonStructuredDataDefType(CommonStructuredDataDefTypeCategory::STRUCT, 0u);
}
}
static void SetDefSizeFromRootStruct(const StructuredDataDefParserState* state)
{
if (state->m_current_def->m_root_type.m_category == CommonStructuredDataDefTypeCategory::STRUCT if (state->m_current_def->m_root_type.m_category == CommonStructuredDataDefTypeCategory::STRUCT
&& state->m_current_def->m_root_type.m_info.type_index < state->m_current_def->m_structs.size()) && state->m_current_def->m_root_type.m_info.type_index < state->m_current_def->m_structs.size())
{ {
const auto* _struct = state->m_current_def->m_structs[state->m_current_def->m_root_type.m_info.type_index].get(); const auto* _struct = state->m_current_def->m_structs[state->m_current_def->m_root_type.m_info.type_index].get();
state->m_current_def->m_size_in_byte = _struct->m_size_in_byte; state->m_current_def->m_size_in_byte = _struct->m_size_in_byte;
} }
}
protected:
void ProcessMatch(StructuredDataDefParserState* state, SequenceResult<SimpleParserValue>& result) const override
{
assert(state->m_current_enum == nullptr);
assert(state->m_current_struct == nullptr);
CreateDefaultStructWhenNoStructsSpecified(state);
SetDefSizeFromRootStruct(state);
state->m_current_def = nullptr; state->m_current_def = nullptr;
state->m_def_types_by_name.clear(); state->m_def_types_by_name.clear();