Change (de)serialization order of versioning and base classes
This allows deserializing the first base class on its own, even then the derived class has been serialized. That makes sense if the full object (of the derived class) should be stored but sometimes only the "base fields" (of the base class) are needed.
This commit is contained in:
parent
5c7a6cba8c
commit
2b0048f144
|
@ -246,6 +246,10 @@ void BinarySerializationCodeGenerator::generate(std::ostream &os) const
|
|||
// print writeCustomType method
|
||||
os << "template <> " << visibility << " void writeCustomType<::" << relevantClass.qualifiedName
|
||||
<< ">(BinarySerializer &serializer, const ::" << relevantClass.qualifiedName << " &customObject, BinaryVersion version)\n{\n";
|
||||
os << " // write base classes\n";
|
||||
for (const RelevantClass *baseClass : relevantBases) {
|
||||
os << " serializer.write(static_cast<const ::" << baseClass->qualifiedName << " &>(customObject), version);\n";
|
||||
}
|
||||
if (!relevantClass.relevantBase.empty()) {
|
||||
os << " // write version\n"
|
||||
" using V = Versioning<"
|
||||
|
@ -255,10 +259,6 @@ void BinarySerializationCodeGenerator::generate(std::ostream &os) const
|
|||
" serializer.writeVariableLengthUIntBE(V::applyDefault(version));\n"
|
||||
" }\n";
|
||||
}
|
||||
os << " // write base classes\n";
|
||||
for (const RelevantClass *baseClass : relevantBases) {
|
||||
os << " serializer.write(static_cast<const ::" << baseClass->qualifiedName << " &>(customObject), version);\n";
|
||||
}
|
||||
os << " // write members\n";
|
||||
auto mt = MemberTracking();
|
||||
for (clang::Decl *const decl : relevantClass.record->decls()) {
|
||||
|
@ -306,6 +306,10 @@ void BinarySerializationCodeGenerator::generate(std::ostream &os) const
|
|||
mt = MemberTracking();
|
||||
os << "template <> " << visibility << " BinaryVersion readCustomType<::" << relevantClass.qualifiedName
|
||||
<< ">(BinaryDeserializer &deserializer, ::" << relevantClass.qualifiedName << " &customObject, BinaryVersion version)\n{\n";
|
||||
os << " // read base classes\n";
|
||||
for (const RelevantClass *baseClass : relevantBases) {
|
||||
os << " deserializer.read(static_cast<::" << baseClass->qualifiedName << " &>(customObject), version);\n";
|
||||
}
|
||||
if (!relevantClass.relevantBase.empty()) {
|
||||
os << " // read version\n"
|
||||
" using V = Versioning<"
|
||||
|
@ -317,10 +321,6 @@ void BinarySerializationCodeGenerator::generate(std::ostream &os) const
|
|||
<< "\");\n"
|
||||
" }\n";
|
||||
}
|
||||
os << " // read base classes\n";
|
||||
for (const RelevantClass *baseClass : relevantBases) {
|
||||
os << " deserializer.read(static_cast<::" << baseClass->qualifiedName << " &>(customObject), version);\n";
|
||||
}
|
||||
os << " // read members\n";
|
||||
for (clang::Decl *const decl : relevantClass.record->decls()) {
|
||||
// check static member variables for version markers
|
||||
|
|
Loading…
Reference in New Issue