LSLib.Granny.GR2.GR2Reader.MixedMarshal C# (CSharp) Method

MixedMarshal() private method

private MixedMarshal ( UInt32 count, StructDefinition definition ) : void
count System.UInt32
definition StructDefinition
return void
        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);
                }
            }
        }