loading works!!

This commit is contained in:
Asuro
2025-03-11 01:19:13 +01:00
parent c7377c3452
commit ffad8f8460
11 changed files with 306 additions and 38 deletions

View File

@@ -88,6 +88,25 @@ namespace Generated
return isOk;
}
)END";
constexpr char LoadFuncHeader1[] =
R"END( bool Load(%s* obj, uint32_t count, Deserializer& serializer);
)END";
constexpr char LoadFuncBodyStart1[] = R"END( bool Load(%s* obj, uint32_t count, Deserializer& serializer)
{
bool isOk = true;
for (uint32_t i = 0; i < count; ++i)
{
)END";
constexpr char LoadFuncBodyType3[] = R"END( isOk = Load(%sobj[i].%s, %u, serializer) && isOk;
)END";
constexpr char LoadFuncBodyEnum1[] = R"END( auto val = (%s)obj[i];
isOk = Load(&val, 1, serializer) && isOk;
)END";
constexpr char LoadFuncBodyEnd[] = R"END( }
return isOk;
}
)END";
} // namespace WriteTemplates
void CppFileWriter::InitBuffer(WriteBuffer& buf)
@@ -220,24 +239,32 @@ void CppFileWriter::WriteTypes(const Def::DefinitionFile& definitions)
Write(WriteTemplates::StructEnd);
}
}
void CppFileWriter::WriteSaveMethods(const Def::DefinitionFile& definitions)
void CppFileWriter::WriteSaveLoadMethods(const Def::DefinitionFile& definitions)
{
char buf[64]{0};
char nameBuf[64]{0};
char fieldBuf[64]{0};
for (int32_t enumIdx = 0; enumIdx < definitions.EnumCount; ++enumIdx)
{
const Def::Enum& e = definitions.Enums[enumIdx];
bx::snprintf(buf, sizeof(buf), "%s::Enum", e.Name);
Write(WriteTemplates::SaveFuncHeader1, buf);
bx::snprintf(nameBuf, sizeof(nameBuf), "%s::Enum", e.Name);
PrintTypeName(fieldBuf, sizeof(fieldBuf), e.EnumType, definitions);
WriteCpp(WriteTemplates::SaveFuncBodyStart1, buf);
PrintTypeName(buf, sizeof(buf), e.EnumType, definitions);
WriteCpp(WriteTemplates::SaveFuncBodyEnum1, buf);
Write(WriteTemplates::SaveFuncHeader1, nameBuf);
Write(WriteTemplates::LoadFuncHeader1, nameBuf);
WriteCpp(WriteTemplates::SaveFuncBodyStart1, nameBuf);
WriteCpp(WriteTemplates::SaveFuncBodyEnum1, fieldBuf);
WriteCpp(WriteTemplates::SaveFuncBodyEnd);
WriteCpp(WriteTemplates::LoadFuncBodyStart1, nameBuf);
WriteCpp(WriteTemplates::LoadFuncBodyEnum1, fieldBuf);
WriteCpp(WriteTemplates::LoadFuncBodyEnd);
}
for (int32_t typeIdx = 0; typeIdx < definitions.TypeCount; ++typeIdx)
{
const Def::Type& t = definitions.Types[typeIdx];
Write(WriteTemplates::SaveFuncHeader1, t.Name);
Write(WriteTemplates::LoadFuncHeader1, t.Name);
WriteCpp(WriteTemplates::SaveFuncBodyStart1, t.Name);
for (int32_t fieldIdx = 0; fieldIdx < t.FieldCount; ++fieldIdx)
@@ -248,11 +275,18 @@ void CppFileWriter::WriteSaveMethods(const Def::DefinitionFile& definitions)
bx::max(1, t.FieldArraySizes[fieldIdx]));
}
WriteCpp(WriteTemplates::SaveFuncBodyEnd);
WriteCpp(WriteTemplates::LoadFuncBodyStart1, t.Name);
for (int32_t fieldIdx = 0; fieldIdx < t.FieldCount; ++fieldIdx)
{
WriteCpp(WriteTemplates::LoadFuncBodyType3,
t.FieldArraySizes[fieldIdx] > 0 ? "" : "&",
t.FieldNames[fieldIdx],
bx::max(1, t.FieldArraySizes[fieldIdx]));
}
WriteCpp(WriteTemplates::LoadFuncBodyEnd);
}
}
void CppFileWriter::WriteLoadMethods(const Def::DefinitionFile& definitions)
{
}
void CppFileWriter::GenerateCpp(const bx::FilePath& outDir, const Def::DefinitionFile& definitions)
{
LOG(0, "Generating output files...");
@@ -264,7 +298,7 @@ void CppFileWriter::GenerateCpp(const bx::FilePath& outDir, const Def::Definitio
WriteCpp(WriteTemplates::FileCppStart);
WriteEnums(definitions);
WriteTypes(definitions);
WriteSaveMethods(definitions);
WriteSaveLoadMethods(definitions);
Write(WriteTemplates::FileEnd);
WriteCpp(WriteTemplates::FileEnd);

View File

@@ -24,8 +24,7 @@ struct CppFileWriter
void PrintTypeName(char* buf, int32_t bufSize, const Def::FieldType& type, const Def::DefinitionFile& definitions);
void WriteEnums(const Def::DefinitionFile& definitions);
void WriteTypes(const Def::DefinitionFile& definitions);
void WriteSaveMethods(const Def::DefinitionFile& definitions);
void WriteLoadMethods(const Def::DefinitionFile& definitions);
void WriteSaveLoadMethods(const Def::DefinitionFile& definitions);
void GenerateCpp(const bx::FilePath& outDir, const Def::DefinitionFile& definitions);
void Write(const char* templateStr, ...);