Add padding dumping to new StructuredDataDef dumper

This commit is contained in:
Jan 2022-03-20 19:15:05 +01:00
parent d82e876558
commit f5a72f4fef

View File

@ -3,6 +3,8 @@
#include <cassert>
#include <sstream>
#include "Utils/Alignment.h"
StructuredDataDefDumperNew::StructuredDataDefDumperNew(std::ostream& stream)
: AbstractTextDumper(stream),
m_flags{}
@ -134,6 +136,16 @@ void StructuredDataDefDumperNew::DumpProperty(const CommonStructuredDataDef& def
std::string typeName;
std::vector<std::string> arraySpecifiers;
currentOffsetInBit = utils::Align(currentOffsetInBit, property.m_type.GetAlignmentInBits());
assert(currentOffsetInBit <= property.m_offset_in_bits);
if (currentOffsetInBit < property.m_offset_in_bits)
{
assert((property.m_offset_in_bits - currentOffsetInBit) % 8 == 0);
Indent();
m_stream << "pad(" << ((property.m_offset_in_bits - currentOffsetInBit) / 8) << ");\n";
currentOffsetInBit = property.m_offset_in_bits;
}
DumpType(def, property.m_type, typeName, arraySpecifiers);
Indent();
@ -142,7 +154,6 @@ void StructuredDataDefDumperNew::DumpProperty(const CommonStructuredDataDef& def
for (auto ri = arraySpecifiers.begin(); ri != arraySpecifiers.end(); ++ri)
m_stream << '[' << *ri << ']';
#ifdef STRUCTUREDDATADEF_DEBUG
m_stream << "; // Offset: " << (property.m_offset_in_bits / 8) << " byte";
if (property.m_offset_in_bits % 8 > 0)
@ -162,8 +173,9 @@ void StructuredDataDefDumperNew::DumpProperty(const CommonStructuredDataDef& def
m_stream << '\n';
#else
m_stream << ";\n";
#endif
currentOffsetInBit += property.m_type.GetSizeInBits(def);
}
void StructuredDataDefDumperNew::DumpStruct(const CommonStructuredDataDef& def, const CommonStructuredDataStruct& _struct, const size_t structIndex)
@ -188,6 +200,13 @@ void StructuredDataDefDumperNew::DumpStruct(const CommonStructuredDataDef& def,
for (const auto& property : _struct.m_properties)
DumpProperty(def, property, currentOffsetInBit);
currentOffsetInBit = utils::Align(currentOffsetInBit, 8u);
if ((currentOffsetInBit / 8) < _struct.m_size_in_byte)
{
Indent();
m_stream << "pad(" << (_struct.m_size_in_byte - (currentOffsetInBit / 8)) << ");\n";
}
DecIndent();
Indent();
m_stream << "};\n"; // end struct