mirror of
https://github.com/Laupetin/OpenAssetTools.git
synced 2025-04-20 16:15:43 +00:00
Parse checksumoverride for StructuredDataDef
This commit is contained in:
parent
93fea39ddd
commit
49c774b1e6
@ -87,6 +87,32 @@ namespace sdd::def_scope_sequences
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class SequenceChecksumOverride final : public StructuredDataDefParser::sequence_t
|
||||||
|
{
|
||||||
|
static constexpr auto CAPTURE_VALUE = 1;
|
||||||
|
|
||||||
|
public:
|
||||||
|
SequenceChecksumOverride()
|
||||||
|
{
|
||||||
|
const SimpleMatcherFactory create(this);
|
||||||
|
|
||||||
|
AddMatchers({
|
||||||
|
create.Keyword("checksumoverride"),
|
||||||
|
create.Integer().Capture(CAPTURE_VALUE),
|
||||||
|
create.Char(';')
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
protected:
|
||||||
|
void ProcessMatch(StructuredDataDefParserState* state, SequenceResult<SimpleParserValue>& result) const override
|
||||||
|
{
|
||||||
|
assert(state->m_current_def);
|
||||||
|
|
||||||
|
state->m_checksum_overriden = true;
|
||||||
|
state->m_checksum_override_value = result.NextCapture(CAPTURE_VALUE).IntegerValue();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
class SequenceCloseScope final : public StructuredDataDefParser::sequence_t
|
class SequenceCloseScope final : public StructuredDataDefParser::sequence_t
|
||||||
{
|
{
|
||||||
static constexpr auto CAPTURE_NAME = 1;
|
static constexpr auto CAPTURE_NAME = 1;
|
||||||
@ -130,12 +156,17 @@ namespace sdd::def_scope_sequences
|
|||||||
CreateDefaultStructWhenNoStructsSpecified(state);
|
CreateDefaultStructWhenNoStructsSpecified(state);
|
||||||
SetDefSizeFromRootStruct(state);
|
SetDefSizeFromRootStruct(state);
|
||||||
|
|
||||||
// TODO: Calculate checksum here
|
if(!state->m_checksum_overriden)
|
||||||
|
state->m_current_def->m_checksum = state->m_current_def->CalculateChecksum();
|
||||||
|
else
|
||||||
|
state->m_current_def->m_checksum = state->m_checksum_override_value;
|
||||||
|
|
||||||
state->m_current_def = nullptr;
|
state->m_current_def = nullptr;
|
||||||
state->m_def_types_by_name.clear();
|
state->m_def_types_by_name.clear();
|
||||||
state->m_def_indexed_arrays.clear();
|
state->m_def_indexed_arrays.clear();
|
||||||
state->m_def_enumed_arrays.clear();
|
state->m_def_enumed_arrays.clear();
|
||||||
|
state->m_checksum_overriden = false;
|
||||||
|
state->m_checksum_override_value = 0u;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
@ -154,4 +185,5 @@ void StructuredDataDefScopeSequences::AddSequences() const
|
|||||||
AddSequence(std::make_unique<SequenceCloseScope>());
|
AddSequence(std::make_unique<SequenceCloseScope>());
|
||||||
AddSequence(std::make_unique<SequenceEnum>());
|
AddSequence(std::make_unique<SequenceEnum>());
|
||||||
AddSequence(std::make_unique<SequenceStruct>());
|
AddSequence(std::make_unique<SequenceStruct>());
|
||||||
|
AddSequence(std::make_unique<SequenceChecksumOverride>());
|
||||||
}
|
}
|
||||||
|
@ -6,6 +6,8 @@ StructuredDataDefParserState::StructuredDataDefParserState()
|
|||||||
: m_current_def(nullptr),
|
: m_current_def(nullptr),
|
||||||
m_current_enum(nullptr),
|
m_current_enum(nullptr),
|
||||||
m_current_struct(nullptr),
|
m_current_struct(nullptr),
|
||||||
m_current_struct_offset_in_bits(0u)
|
m_current_struct_offset_in_bits(0u),
|
||||||
|
m_checksum_override_value(0u),
|
||||||
|
m_checksum_overriden(false)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
@ -19,6 +19,9 @@ namespace sdd
|
|||||||
CommonStructuredDataStruct* m_current_struct;
|
CommonStructuredDataStruct* m_current_struct;
|
||||||
size_t m_current_struct_offset_in_bits;
|
size_t m_current_struct_offset_in_bits;
|
||||||
|
|
||||||
|
size_t m_checksum_override_value;
|
||||||
|
bool m_checksum_overriden;
|
||||||
|
|
||||||
std::map<std::string, CommonStructuredDataType> m_def_types_by_name;
|
std::map<std::string, CommonStructuredDataType> m_def_types_by_name;
|
||||||
std::map<CommonStructuredDataIndexedArray, size_t> m_def_indexed_arrays;
|
std::map<CommonStructuredDataIndexedArray, size_t> m_def_indexed_arrays;
|
||||||
std::map<CommonStructuredDataEnumedArray, size_t> m_def_enumed_arrays;
|
std::map<CommonStructuredDataEnumedArray, size_t> m_def_enumed_arrays;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user