new save format
This commit is contained in:
@@ -1,18 +0,0 @@
|
||||
#pragma once
|
||||
|
||||
#include <cstdint>
|
||||
|
||||
#define LOG(line, fmt, ...) Logging::Log(Logging::ELogType::Log, line, fmt, ##__VA_ARGS__)
|
||||
#define LOG_WARN(line, fmt, ...) Logging::Log(Logging::ELogType::Warn, line, fmt, ##__VA_ARGS__)
|
||||
#define LOG_ERROR(line, fmt, ...) Logging::Log(Logging::ELogType::Error, line, fmt, ##__VA_ARGS__)
|
||||
|
||||
struct Logging
|
||||
{
|
||||
enum class ELogType
|
||||
{
|
||||
Log,
|
||||
Warn,
|
||||
Error,
|
||||
};
|
||||
static void Log(ELogType logType, uint32_t line, const char* format, ...);
|
||||
};
|
||||
@@ -85,6 +85,8 @@ namespace Gen
|
||||
{
|
||||
)END";
|
||||
constexpr char SaveFuncBodyType3[] = R"END( isOk = Save(%sobj[i].%s, %u, serializer) && isOk;
|
||||
)END";
|
||||
constexpr char SaveFuncBodyNative[] = R"END( isOk = serializer.Write(&obj[i], sizeof(obj[i])) && isOk;
|
||||
)END";
|
||||
constexpr char SaveFuncBodyEnum1[] = R"END( auto val = (%s)obj[i];
|
||||
isOk = Save(&val, 1, serializer) && isOk;
|
||||
@@ -104,6 +106,8 @@ namespace Gen
|
||||
{
|
||||
)END";
|
||||
constexpr char LoadFuncBodyType3[] = R"END( isOk = Load(%sobj[i].%s, %u, serializer) && isOk;
|
||||
)END";
|
||||
constexpr char LoadFuncBodyNative[] = R"END( isOk = serializer.Read(&obj[i], sizeof(obj[i])) && isOk;
|
||||
)END";
|
||||
constexpr char LoadFuncBodyEnum2[] = R"END( %s& val = (%s&)obj[i];
|
||||
isOk = Load(&val, 1, serializer) && isOk;
|
||||
@@ -119,7 +123,7 @@ namespace Gen
|
||||
{
|
||||
uint32_t Size = 0;
|
||||
uint32_t Hash = 0;
|
||||
const char Name[64]{"Dummy"};
|
||||
char Name[64]{"Dummy"};
|
||||
uint16_t ChildCount = 0;
|
||||
uint16_t ChildIndices[64]{0};
|
||||
};
|
||||
@@ -327,20 +331,34 @@ void CppFileWriter::WriteSaveLoadMethods(const Def::DefinitionFile& definitions)
|
||||
WriteCpp(WriteTemplates::SaveFuncBodyStart1, typeName);
|
||||
for (int32_t fieldIdx = 0; fieldIdx < t.FieldCount; ++fieldIdx)
|
||||
{
|
||||
WriteCpp(WriteTemplates::SaveFuncBodyType3,
|
||||
t.FieldArraySizes[fieldIdx] > 0 ? "" : "&",
|
||||
t.FieldNames[fieldIdx],
|
||||
bx::max(1, t.FieldArraySizes[fieldIdx]));
|
||||
if (Def::IsFieldNative(definitions, t, fieldIdx))
|
||||
{
|
||||
WriteCpp(WriteTemplates::SaveFuncBodyNative);
|
||||
}
|
||||
else
|
||||
{
|
||||
WriteCpp(WriteTemplates::SaveFuncBodyType3,
|
||||
t.FieldArraySizes[fieldIdx] > 0 ? "" : "&",
|
||||
t.FieldNames[fieldIdx],
|
||||
bx::max(1, t.FieldArraySizes[fieldIdx]));
|
||||
}
|
||||
}
|
||||
WriteCpp(WriteTemplates::SaveFuncBodyEnd);
|
||||
|
||||
WriteCpp(WriteTemplates::LoadFuncBodyStart1, typeName);
|
||||
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]));
|
||||
if (Def::IsFieldNative(definitions, t, fieldIdx))
|
||||
{
|
||||
WriteCpp(WriteTemplates::LoadFuncBodyNative);
|
||||
}
|
||||
else
|
||||
{
|
||||
WriteCpp(WriteTemplates::LoadFuncBodyType3,
|
||||
t.FieldArraySizes[fieldIdx] > 0 ? "" : "&",
|
||||
t.FieldNames[fieldIdx],
|
||||
bx::max(1, t.FieldArraySizes[fieldIdx]));
|
||||
}
|
||||
}
|
||||
WriteCpp(WriteTemplates::LoadFuncBodyEnd);
|
||||
}
|
||||
|
||||
@@ -220,7 +220,7 @@ namespace Gen
|
||||
bool isOk = true;
|
||||
for (uint32_t i = 0; i < count; ++i)
|
||||
{
|
||||
isOk = Save(&obj[i].Number, 1, serializer) && isOk;
|
||||
isOk = serializer.Write(&obj[i], sizeof(obj[i])) && isOk;
|
||||
}
|
||||
return isOk;
|
||||
}
|
||||
@@ -229,7 +229,7 @@ namespace Gen
|
||||
bool isOk = true;
|
||||
for (uint32_t i = 0; i < count; ++i)
|
||||
{
|
||||
isOk = Load(&obj[i].Number, 1, serializer) && isOk;
|
||||
isOk = serializer.Read(&obj[i], sizeof(obj[i])) && isOk;
|
||||
}
|
||||
return isOk;
|
||||
}
|
||||
@@ -238,9 +238,9 @@ namespace Gen
|
||||
bool isOk = true;
|
||||
for (uint32_t i = 0; i < count; ++i)
|
||||
{
|
||||
isOk = Save(&obj[i].Width, 1, serializer) && isOk;
|
||||
isOk = Save(&obj[i].Height, 1, serializer) && isOk;
|
||||
isOk = Save(obj[i].StrTest, 3, serializer) && isOk;
|
||||
isOk = serializer.Write(&obj[i], sizeof(obj[i])) && isOk;
|
||||
isOk = serializer.Write(&obj[i], sizeof(obj[i])) && isOk;
|
||||
isOk = serializer.Write(&obj[i], sizeof(obj[i])) && isOk;
|
||||
isOk = Save(&obj[i].T, 1, serializer) && isOk;
|
||||
}
|
||||
return isOk;
|
||||
@@ -250,9 +250,9 @@ namespace Gen
|
||||
bool isOk = true;
|
||||
for (uint32_t i = 0; i < count; ++i)
|
||||
{
|
||||
isOk = Load(&obj[i].Width, 1, serializer) && isOk;
|
||||
isOk = Load(&obj[i].Height, 1, serializer) && isOk;
|
||||
isOk = Load(obj[i].StrTest, 3, serializer) && isOk;
|
||||
isOk = serializer.Read(&obj[i], sizeof(obj[i])) && isOk;
|
||||
isOk = serializer.Read(&obj[i], sizeof(obj[i])) && isOk;
|
||||
isOk = serializer.Read(&obj[i], sizeof(obj[i])) && isOk;
|
||||
isOk = Load(&obj[i].T, 1, serializer) && isOk;
|
||||
}
|
||||
return isOk;
|
||||
|
||||
@@ -104,7 +104,7 @@ namespace Gen
|
||||
{
|
||||
uint32_t Size = 0;
|
||||
uint32_t Hash = 0;
|
||||
const char Name[64]{"Dummy"};
|
||||
char Name[64]{"Dummy"};
|
||||
uint16_t ChildCount = 0;
|
||||
uint16_t ChildIndices[64]{0};
|
||||
};
|
||||
|
||||
@@ -69,4 +69,10 @@ namespace Def
|
||||
Def::Enum Enums[MaxTypes];
|
||||
int32_t EnumCount = 0;
|
||||
};
|
||||
|
||||
inline bool IsFieldNative(const DefinitionFile& definitions, const Type& type, int32_t fieldIdx)
|
||||
{
|
||||
return ((int32_t)definitions.Types[type.FieldTypes[fieldIdx].TypeIdx].TypeFlags &
|
||||
(int32_t)ETypeFlags::IsNative) > 0;
|
||||
}
|
||||
} // namespace Def
|
||||
|
||||
Reference in New Issue
Block a user