private void MixedMarshal(UInt32 count, StructDefinition definition)
{
for (var arrayIdx = 0; arrayIdx < count; arrayIdx++)
{
foreach (var member in definition.Members)
{
var size = member.Size(this);
if (member.Type == MemberType.Inline)
{
MixedMarshal(member.ArraySize == 0 ? 1 : member.ArraySize, member.Definition.Resolve(this));
}
else if (member.MarshallingSize() > 1)
{
var marshalSize = member.MarshallingSize();
byte[] data = new byte[size];
Stream.Read(data, 0, (int)size);
for (var j = 0; j < size / marshalSize; j++)
{
// Byte swap for 2, 4, 8-byte values
for (var off = 0; off < marshalSize / 2; off++)
{
var tmp = data[j * marshalSize + off];
data[j * marshalSize + off] = data[j * marshalSize + marshalSize - 1 - off];
data[j * marshalSize + marshalSize - 1 - off] = tmp;
}
}
Stream.Seek(-size, SeekOrigin.Current);
Stream.Write(data, 0, (int)size);
Stream.Seek(-size, SeekOrigin.Current);
}
Stream.Seek(size, SeekOrigin.Current);
}
}
}