mirror of
https://github.com/Laupetin/OpenAssetTools.git
synced 2025-04-19 15:52:53 +00:00
Add padding dumping to new StructuredDataDef dumper
This commit is contained in:
parent
d82e876558
commit
f5a72f4fef
@ -3,6 +3,8 @@
|
|||||||
#include <cassert>
|
#include <cassert>
|
||||||
#include <sstream>
|
#include <sstream>
|
||||||
|
|
||||||
|
#include "Utils/Alignment.h"
|
||||||
|
|
||||||
StructuredDataDefDumperNew::StructuredDataDefDumperNew(std::ostream& stream)
|
StructuredDataDefDumperNew::StructuredDataDefDumperNew(std::ostream& stream)
|
||||||
: AbstractTextDumper(stream),
|
: AbstractTextDumper(stream),
|
||||||
m_flags{}
|
m_flags{}
|
||||||
@ -134,6 +136,16 @@ void StructuredDataDefDumperNew::DumpProperty(const CommonStructuredDataDef& def
|
|||||||
std::string typeName;
|
std::string typeName;
|
||||||
std::vector<std::string> arraySpecifiers;
|
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);
|
DumpType(def, property.m_type, typeName, arraySpecifiers);
|
||||||
|
|
||||||
Indent();
|
Indent();
|
||||||
@ -142,7 +154,6 @@ void StructuredDataDefDumperNew::DumpProperty(const CommonStructuredDataDef& def
|
|||||||
for (auto ri = arraySpecifiers.begin(); ri != arraySpecifiers.end(); ++ri)
|
for (auto ri = arraySpecifiers.begin(); ri != arraySpecifiers.end(); ++ri)
|
||||||
m_stream << '[' << *ri << ']';
|
m_stream << '[' << *ri << ']';
|
||||||
|
|
||||||
|
|
||||||
#ifdef STRUCTUREDDATADEF_DEBUG
|
#ifdef STRUCTUREDDATADEF_DEBUG
|
||||||
m_stream << "; // Offset: " << (property.m_offset_in_bits / 8) << " byte";
|
m_stream << "; // Offset: " << (property.m_offset_in_bits / 8) << " byte";
|
||||||
if (property.m_offset_in_bits % 8 > 0)
|
if (property.m_offset_in_bits % 8 > 0)
|
||||||
@ -162,8 +173,9 @@ void StructuredDataDefDumperNew::DumpProperty(const CommonStructuredDataDef& def
|
|||||||
m_stream << '\n';
|
m_stream << '\n';
|
||||||
#else
|
#else
|
||||||
m_stream << ";\n";
|
m_stream << ";\n";
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
currentOffsetInBit += property.m_type.GetSizeInBits(def);
|
||||||
}
|
}
|
||||||
|
|
||||||
void StructuredDataDefDumperNew::DumpStruct(const CommonStructuredDataDef& def, const CommonStructuredDataStruct& _struct, const size_t structIndex)
|
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)
|
for (const auto& property : _struct.m_properties)
|
||||||
DumpProperty(def, property, currentOffsetInBit);
|
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();
|
DecIndent();
|
||||||
Indent();
|
Indent();
|
||||||
m_stream << "};\n"; // end struct
|
m_stream << "};\n"; // end struct
|
||||||
|
Loading…
x
Reference in New Issue
Block a user