fix upgrades one more time

This commit is contained in:
Asuro
2025-05-10 18:12:15 +02:00
parent 5d1db591b7
commit 1616704c50
19 changed files with 210 additions and 104 deletions

View File

@@ -166,7 +166,8 @@ namespace Gen
if (WriteDestinations[j] == UINT64_MAX)
{
// Unknown member name or type changed
serializer.Skip(childDef.Size);
uint16_t count = bx::max(1, matchedDef.ChildArraySizes[matchedDef.ChildIndices[j]]);
serializer.Skip(childDef.Size * count);
continue;
}
@@ -204,6 +205,8 @@ namespace Gen
)END";
constexpr char MetadataStart1[] = R"END(
namespace Meta {
constexpr uint16_t CurrentMetaVersion = 1;
struct StrRef
{
uint16_t Offset;
@@ -217,6 +220,7 @@ namespace Gen
char Name[64]{"Dummy"};
uint16_t ChildCount = 0;
uint16_t ChildIndices[64]{0};
uint16_t ChildArraySizes[64]{0};
StrRef MemberNameIndices[64]{0};
};
@@ -226,7 +230,7 @@ namespace Gen
{
)END";
constexpr char MetadataTypeEntry6[] = R"END( TypeDef{sizeof(%s), %u, "%s", %u, {%s}, {%s}},
constexpr char MetadataTypeEntry7[] = R"END( TypeDef{sizeof(%s), %u, "%s", %u, {%s}, {%s}, {%s}},
)END";
constexpr char MetadataEnd1[] = R"END( };
char MemberNameBuffer[64*64*64]{"%s"};
@@ -505,8 +509,24 @@ void CppFileWriter::WriteMetadata(const Def::DefinitionFile& definitions)
sizeof(MemberNameBuffer) - memberNameBufferIdx,
type.FieldNames[j]);
}
Write(
WriteTemplates::MetadataTypeEntry6, typeStr, type.Hash, type.Name, type.FieldCount, fieldStr, memberIdxStr);
char arrStr[256]{0};
for (int32_t j = 0; j < type.FieldCount; ++j)
{
if (j != 0) bx::strCat(arrStr, sizeof(arrStr), ", ");
char numBuf[16]{0};
bx::snprintf(numBuf, sizeof(numBuf), "%u", type.FieldArraySizes[j]);
bx::strCat(arrStr, sizeof(arrStr), numBuf);
}
Write(WriteTemplates::MetadataTypeEntry7,
typeStr,
type.Hash,
type.Name,
type.FieldCount,
fieldStr,
arrStr,
memberIdxStr);
}
for (uint16_t i = 0; i < definitions.EnumCount; ++i)
{
@@ -515,7 +535,7 @@ void CppFileWriter::WriteMetadata(const Def::DefinitionFile& definitions)
char typeStr[Def::MaxNameLength]{0};
PrintTypeName(typeStr, sizeof(typeStr), {i, Def::EFieldType::DefinedEnum}, definitions);
Write(WriteTemplates::MetadataTypeEntry6, typeStr, enumType.Hash, enumType.Name, 0, "", "");
Write(WriteTemplates::MetadataTypeEntry7, typeStr, enumType.Hash, enumType.Name, 0, "", "", "");
}
Write(WriteTemplates::MetadataEnd1, MemberNameBuffer);
}