mirror of
https://github.com/Laupetin/OpenAssetTools.git
synced 2025-04-20 16:15:43 +00:00
Save offset for reusing for any type that has a reusable reference
This commit is contained in:
parent
5cd5ae5533
commit
1d33cf2adf
@ -9,6 +9,7 @@ StructureInformation::StructureInformation(DefinitionWithMembers* definition)
|
||||
m_array_pointer_reference_exists(false),
|
||||
m_array_reference_exists(false),
|
||||
m_reference_from_non_default_normal_block_exists(false),
|
||||
m_reusable_reference_exists(false),
|
||||
m_post_load_action(nullptr),
|
||||
m_block(nullptr)
|
||||
{
|
||||
|
@ -24,6 +24,7 @@ public:
|
||||
bool m_array_pointer_reference_exists;
|
||||
bool m_array_reference_exists;
|
||||
bool m_reference_from_non_default_normal_block_exists;
|
||||
bool m_reusable_reference_exists;
|
||||
|
||||
std::unique_ptr<CustomAction> m_post_load_action;
|
||||
const FastFileBlock* m_block;
|
||||
|
@ -381,6 +381,9 @@ class ZoneWriteTemplate::Internal final : BaseTemplate
|
||||
|
||||
static bool WriteMember_ShouldMakeInsertReuse(StructureInformation* info, MemberInformation* member, const DeclarationModifierComputations& modifier, const MemberWriteType writeType)
|
||||
{
|
||||
if (member->m_type == nullptr || !member->m_type->m_reusable_reference_exists)
|
||||
return false;
|
||||
|
||||
if (writeType != MemberWriteType::ARRAY_POINTER
|
||||
&& writeType != MemberWriteType::SINGLE_POINTER
|
||||
&& writeType != MemberWriteType::POINTER_ARRAY)
|
||||
@ -399,8 +402,7 @@ class ZoneWriteTemplate::Internal final : BaseTemplate
|
||||
|
||||
void WriteMember_InsertReuse(StructureInformation* info, MemberInformation* member, const DeclarationModifierComputations& modifier, const MemberWriteType writeType)
|
||||
{
|
||||
if (!WriteMember_ShouldMakeInsertReuse(info, member, modifier, writeType)
|
||||
|| !member->m_is_reusable)
|
||||
if (!WriteMember_ShouldMakeInsertReuse(info, member, modifier, writeType))
|
||||
{
|
||||
WriteMember_TypeCheck(info, member, modifier, writeType);
|
||||
return;
|
||||
@ -487,13 +489,12 @@ class ZoneWriteTemplate::Internal final : BaseTemplate
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
return member->m_is_reusable;
|
||||
}
|
||||
|
||||
void WriteMember_Reuse(StructureInformation* info, MemberInformation* member, const DeclarationModifierComputations& modifier, const MemberWriteType writeType)
|
||||
{
|
||||
if (!WriteMember_ShouldMakeReuse(info, member, modifier, writeType)
|
||||
|| !member->m_is_reusable)
|
||||
if (!WriteMember_ShouldMakeReuse(info, member, modifier, writeType))
|
||||
{
|
||||
WriteMember_Align(info, member, modifier, writeType);
|
||||
return;
|
||||
|
@ -48,6 +48,9 @@ bool UsagesPostProcessor::ProcessAsset(StructureInformation* info)
|
||||
if (computations.IsNotInDefaultNormalBlock())
|
||||
member->m_type->m_reference_from_non_default_normal_block_exists = true;
|
||||
|
||||
if (member->m_is_reusable)
|
||||
member->m_type->m_reusable_reference_exists = true;
|
||||
|
||||
member->m_type->m_usages.push_back(currentStructure);
|
||||
processingQueue.push(member->m_type);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user