fix enum upgrades
This commit is contained in:
@@ -16,7 +16,6 @@ namespace WriteTemplates
|
||||
constexpr char FileHeaderStart[] =
|
||||
R"END(#pragma once
|
||||
#include <cstdint>
|
||||
#include <cassert>
|
||||
|
||||
namespace Gen
|
||||
{
|
||||
@@ -47,7 +46,7 @@ namespace Gen
|
||||
constexpr char EnumHeader4[] =
|
||||
R"END( struct %s
|
||||
{
|
||||
static constexpr uint16_t EnumIdx = %u;
|
||||
static constexpr uint16_t TypeIdx = %u;
|
||||
static constexpr int32_t EntryCount = %u;
|
||||
enum Enum : %s
|
||||
{
|
||||
@@ -221,12 +220,6 @@ namespace Gen
|
||||
StrRef MemberNameIndices[64]{0};
|
||||
};
|
||||
|
||||
struct EnumDef
|
||||
{
|
||||
uint32_t Size = 0;
|
||||
uint32_t Hash = 0;
|
||||
};
|
||||
|
||||
struct MetadataTable
|
||||
{
|
||||
TypeDef TypeDefinitions[%u]
|
||||
@@ -234,12 +227,6 @@ namespace Gen
|
||||
)END";
|
||||
|
||||
constexpr char MetadataTypeEntry6[] = R"END( TypeDef{sizeof(%s), %u, "%s", %u, {%s}, {%s}},
|
||||
)END";
|
||||
constexpr char MetadataEnumStart1[] = R"END( };
|
||||
EnumDef EnumDefinitions[%u]
|
||||
{
|
||||
)END";
|
||||
constexpr char MetadataEnumEntry2[] = R"END( EnumDef{sizeof(%s::Enum), %u},
|
||||
)END";
|
||||
constexpr char MetadataEnd1[] = R"END( };
|
||||
char MemberNameBuffer[64*64*64]{"%s"};
|
||||
@@ -300,7 +287,8 @@ void CppFileWriter::WriteInternal(WriteBuffer& buf, const char* templateStr, va_
|
||||
buf.WrittenBytes += bx::vsnprintf(&buf.Data[buf.WrittenBytes], BufferRequestSize, templateStr, args);
|
||||
}
|
||||
|
||||
void CppFileWriter::PrintTypeName(char* buf, int32_t bufSize, Def::TypeRef type, const Def::DefinitionFile& definitions)
|
||||
void CppFileWriter::PrintTypeName(
|
||||
char* buf, int32_t bufSize, Def::TypeRef type, const Def::DefinitionFile& definitions, bool printActualEnumType)
|
||||
{
|
||||
if (buf == nullptr || bufSize == 0 || !IsValid(type))
|
||||
{
|
||||
@@ -322,7 +310,10 @@ void CppFileWriter::PrintTypeName(char* buf, int32_t bufSize, Def::TypeRef type,
|
||||
else if (type.FieldKind == Def::EFieldType::DefinedEnum)
|
||||
{
|
||||
bx::strCopy(buf, bufSize, definitions.Enums[type.TypeIdx].Name);
|
||||
bx::strCat(buf, bufSize, "::Enum");
|
||||
if (printActualEnumType)
|
||||
{
|
||||
bx::strCat(buf, bufSize, "::Enum");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -340,7 +331,7 @@ void CppFileWriter::WriteEnums(const Def::DefinitionFile& definitions)
|
||||
|
||||
char Buf[Def::MaxNameLength]{0};
|
||||
PrintTypeName(Buf, sizeof(Buf), e.EnumType, definitions);
|
||||
Write(WriteTemplates::EnumHeader4, e.Name, enumIdx, e.EntryCount, Buf);
|
||||
Write(WriteTemplates::EnumHeader4, e.Name, definitions.TypeCount + enumIdx, e.EntryCount, Buf);
|
||||
for (int32_t entryIdx = 0; entryIdx < e.EntryCount; ++entryIdx)
|
||||
{
|
||||
Write(WriteTemplates::EnumField1, e.EntryNames[entryIdx]);
|
||||
@@ -458,7 +449,7 @@ void CppFileWriter::WriteSaveLoadMethods(const Def::DefinitionFile& definitions)
|
||||
for (int32_t fieldIdx = 0; fieldIdx < t.FieldCount; ++fieldIdx)
|
||||
{
|
||||
const char* fieldName = t.FieldNames[fieldIdx];
|
||||
PrintTypeName(fieldTypeName, sizeof(fieldTypeName), t.FieldTypes[fieldIdx], definitions);
|
||||
PrintTypeName(fieldTypeName, sizeof(fieldTypeName), t.FieldTypes[fieldIdx], definitions, false);
|
||||
WriteCpp(WriteTemplates::LoadFuncBodyMemberCheck4, fieldName, fieldTypeName, typeName, fieldName);
|
||||
}
|
||||
WriteCpp(WriteTemplates::LoadFuncBodyTypeUpgradeStart);
|
||||
@@ -483,7 +474,7 @@ namespace
|
||||
void CppFileWriter::WriteMetadata(const Def::DefinitionFile& definitions)
|
||||
{
|
||||
uint32_t memberNameBufferIdx = 0;
|
||||
Write(WriteTemplates::MetadataStart1, definitions.TypeCount);
|
||||
Write(WriteTemplates::MetadataStart1, definitions.TypeCount + definitions.EnumCount);
|
||||
for (uint16_t i = 0; i < definitions.TypeCount; ++i)
|
||||
{
|
||||
auto& type = definitions.Types[i];
|
||||
@@ -493,7 +484,9 @@ void CppFileWriter::WriteMetadata(const Def::DefinitionFile& definitions)
|
||||
{
|
||||
if (j != 0) bx::strCat(fieldStr, sizeof(fieldStr), ", ");
|
||||
char numBuf[8]{0};
|
||||
bx::snprintf(numBuf, sizeof(numBuf), "%u", type.FieldTypes[j].TypeIdx);
|
||||
int32_t idx = type.FieldTypes[j].TypeIdx;
|
||||
if (type.FieldTypes[j].FieldKind == Def::EFieldType::DefinedEnum) idx += definitions.TypeCount;
|
||||
bx::snprintf(numBuf, sizeof(numBuf), "%u", idx);
|
||||
bx::strCat(fieldStr, sizeof(fieldStr), numBuf);
|
||||
}
|
||||
|
||||
@@ -515,10 +508,14 @@ void CppFileWriter::WriteMetadata(const Def::DefinitionFile& definitions)
|
||||
Write(
|
||||
WriteTemplates::MetadataTypeEntry6, typeStr, type.Hash, type.Name, type.FieldCount, fieldStr, memberIdxStr);
|
||||
}
|
||||
Write(WriteTemplates::MetadataEnumStart1, definitions.EnumCount);
|
||||
for (int32_t i = 0; i < definitions.EnumCount; ++i)
|
||||
for (uint16_t i = 0; i < definitions.EnumCount; ++i)
|
||||
{
|
||||
Write(WriteTemplates::MetadataEnumEntry2, definitions.Enums[i].Name, definitions.Enums[i].Hash);
|
||||
auto& enumType = definitions.Enums[i];
|
||||
|
||||
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::MetadataEnd1, MemberNameBuffer);
|
||||
}
|
||||
|
||||
@@ -21,7 +21,11 @@ struct CppFileWriter
|
||||
void WriteInternal(WriteBuffer& buf, const char* templateStr, va_list args);
|
||||
|
||||
public:
|
||||
void PrintTypeName(char* buf, int32_t bufSize, Def::TypeRef type, const Def::DefinitionFile& definitions);
|
||||
void PrintTypeName(char* buf,
|
||||
int32_t bufSize,
|
||||
Def::TypeRef type,
|
||||
const Def::DefinitionFile& definitions,
|
||||
bool printActualEnumType = true);
|
||||
void WriteEnums(const Def::DefinitionFile& definitions);
|
||||
void WriteTypes(const Def::DefinitionFile& definitions);
|
||||
void WriteSaveLoadMethods(const Def::DefinitionFile& definitions);
|
||||
|
||||
Reference in New Issue
Block a user