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_pointer_reference_exists(false),
|
||||||
m_array_reference_exists(false),
|
m_array_reference_exists(false),
|
||||||
m_reference_from_non_default_normal_block_exists(false),
|
m_reference_from_non_default_normal_block_exists(false),
|
||||||
|
m_reusable_reference_exists(false),
|
||||||
m_post_load_action(nullptr),
|
m_post_load_action(nullptr),
|
||||||
m_block(nullptr)
|
m_block(nullptr)
|
||||||
{
|
{
|
||||||
|
@ -24,6 +24,7 @@ public:
|
|||||||
bool m_array_pointer_reference_exists;
|
bool m_array_pointer_reference_exists;
|
||||||
bool m_array_reference_exists;
|
bool m_array_reference_exists;
|
||||||
bool m_reference_from_non_default_normal_block_exists;
|
bool m_reference_from_non_default_normal_block_exists;
|
||||||
|
bool m_reusable_reference_exists;
|
||||||
|
|
||||||
std::unique_ptr<CustomAction> m_post_load_action;
|
std::unique_ptr<CustomAction> m_post_load_action;
|
||||||
const FastFileBlock* m_block;
|
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)
|
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
|
if (writeType != MemberWriteType::ARRAY_POINTER
|
||||||
&& writeType != MemberWriteType::SINGLE_POINTER
|
&& writeType != MemberWriteType::SINGLE_POINTER
|
||||||
&& writeType != MemberWriteType::POINTER_ARRAY)
|
&& 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)
|
void WriteMember_InsertReuse(StructureInformation* info, MemberInformation* member, const DeclarationModifierComputations& modifier, const MemberWriteType writeType)
|
||||||
{
|
{
|
||||||
if (!WriteMember_ShouldMakeInsertReuse(info, member, modifier, writeType)
|
if (!WriteMember_ShouldMakeInsertReuse(info, member, modifier, writeType))
|
||||||
|| !member->m_is_reusable)
|
|
||||||
{
|
{
|
||||||
WriteMember_TypeCheck(info, member, modifier, writeType);
|
WriteMember_TypeCheck(info, member, modifier, writeType);
|
||||||
return;
|
return;
|
||||||
@ -487,13 +489,12 @@ class ZoneWriteTemplate::Internal final : BaseTemplate
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return member->m_is_reusable;
|
||||||
}
|
}
|
||||||
|
|
||||||
void WriteMember_Reuse(StructureInformation* info, MemberInformation* member, const DeclarationModifierComputations& modifier, const MemberWriteType writeType)
|
void WriteMember_Reuse(StructureInformation* info, MemberInformation* member, const DeclarationModifierComputations& modifier, const MemberWriteType writeType)
|
||||||
{
|
{
|
||||||
if (!WriteMember_ShouldMakeReuse(info, member, modifier, writeType)
|
if (!WriteMember_ShouldMakeReuse(info, member, modifier, writeType))
|
||||||
|| !member->m_is_reusable)
|
|
||||||
{
|
{
|
||||||
WriteMember_Align(info, member, modifier, writeType);
|
WriteMember_Align(info, member, modifier, writeType);
|
||||||
return;
|
return;
|
||||||
|
@ -48,6 +48,9 @@ bool UsagesPostProcessor::ProcessAsset(StructureInformation* info)
|
|||||||
if (computations.IsNotInDefaultNormalBlock())
|
if (computations.IsNotInDefaultNormalBlock())
|
||||||
member->m_type->m_reference_from_non_default_normal_block_exists = true;
|
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);
|
member->m_type->m_usages.push_back(currentStructure);
|
||||||
processingQueue.push(member->m_type);
|
processingQueue.push(member->m_type);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user