mirror of
https://github.com/Laupetin/OpenAssetTools.git
synced 2025-06-16 01:37:57 -05:00
chore: make allocating redirect entry work with ptr directly
This commit is contained in:
@ -567,7 +567,7 @@ namespace
|
|||||||
|
|
||||||
if (memberInfo.m_is_reusable || (memberInfo.m_type && StructureComputations(memberInfo.m_type).IsAsset()))
|
if (memberInfo.m_is_reusable || (memberInfo.m_type && StructureComputations(memberInfo.m_type).IsAsset()))
|
||||||
{
|
{
|
||||||
LINEF("fillAccessor.InsertPointerRedirect(m_stream.AllocRedirectEntry({0}), {1});",
|
LINEF("fillAccessor.InsertPointerRedirect(m_stream.AllocRedirectEntry(&{0}), {1});",
|
||||||
MakeMemberAccess(&structInfo, &memberInfo, modifier),
|
MakeMemberAccess(&structInfo, &memberInfo, modifier),
|
||||||
OffsetForMemberModifier(memberInfo, modifier, nestedBaseOffset))
|
OffsetForMemberModifier(memberInfo, modifier, nestedBaseOffset))
|
||||||
}
|
}
|
||||||
@ -1019,7 +1019,7 @@ namespace
|
|||||||
|
|
||||||
if (reusable || (info && StructureComputations(info).IsAsset()))
|
if (reusable || (info && StructureComputations(info).IsAsset()))
|
||||||
{
|
{
|
||||||
LINEF("ptrArrayFill.InsertPointerRedirect(m_stream.AllocRedirectEntry({0}[index]), {1} * index);",
|
LINEF("ptrArrayFill.InsertPointerRedirect(m_stream.AllocRedirectEntry(&{0}[index]), {1} * index);",
|
||||||
MakeTypePtrVarName(def),
|
MakeTypePtrVarName(def),
|
||||||
m_env.m_pointer_size)
|
m_env.m_pointer_size)
|
||||||
}
|
}
|
||||||
|
@ -155,7 +155,7 @@ void ContentLoader::LoadXAssetArray(const bool atStreamStart, const size_t count
|
|||||||
{
|
{
|
||||||
fill.Fill(varXAsset[index].type, 8u * index);
|
fill.Fill(varXAsset[index].type, 8u * index);
|
||||||
fill.FillPtr(varXAsset[index].header.data, 8u * index + 4u);
|
fill.FillPtr(varXAsset[index].header.data, 8u * index + 4u);
|
||||||
fill.InsertPointerRedirect(m_stream.AllocRedirectEntry(varXAsset[index].header.data), 8u * index + 4u);
|
fill.InsertPointerRedirect(m_stream.AllocRedirectEntry(&varXAsset[index].header.data), 8u * index + 4u);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
@ -355,10 +355,11 @@ namespace
|
|||||||
return *reinterpret_cast<void**>(&block->m_buffer[blockOffset]);
|
return *reinterpret_cast<void**>(&block->m_buffer[blockOffset]);
|
||||||
}
|
}
|
||||||
|
|
||||||
uintptr_t AllocRedirectEntry(void** alias) override
|
uintptr_t AllocRedirectEntry(void* alias) override
|
||||||
{
|
{
|
||||||
// nullptr is always lookup alias 0
|
// nullptr is always lookup alias 0
|
||||||
if (*alias == nullptr)
|
assert(alias);
|
||||||
|
if (alias == nullptr)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
const auto newIndex = m_pointer_redirect_lookup.size();
|
const auto newIndex = m_pointer_redirect_lookup.size();
|
||||||
|
@ -151,12 +151,7 @@ public:
|
|||||||
return static_cast<T*>(ConvertOffsetToAliasNative(static_cast<const void*>(offset)));
|
return static_cast<T*>(ConvertOffsetToAliasNative(static_cast<const void*>(offset)));
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual uintptr_t AllocRedirectEntry(void** alias) = 0;
|
virtual uintptr_t AllocRedirectEntry(void* alias) = 0;
|
||||||
|
|
||||||
template<typename T> uintptr_t AllocRedirectEntry(T*& offset)
|
|
||||||
{
|
|
||||||
return AllocRedirectEntry(reinterpret_cast<void**>(const_cast<std::remove_const_t<T>**>(&offset)));
|
|
||||||
}
|
|
||||||
|
|
||||||
virtual void* ConvertOffsetToPointerRedirect(const void* offset) = 0;
|
virtual void* ConvertOffsetToPointerRedirect(const void* offset) = 0;
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user