Beispiel #1
0
        private byte[] VerifyBytes <T>(T instance, byte[] expected)
            where T : struct
        {
            var structLayout = typeof(T).GetTypeInfo().StructLayoutAttribute;

            Assert.NotNull(structLayout);
            Assert.Equal(LayoutKind.Sequential, structLayout.Value);
            Assert.Equal(1, structLayout.Pack);

            var serialized = SdbData.Serialize(new[] { instance });

            var str = string.Join(", ", serialized.Select(t => "0x" + t.ToString("X2")));

            _output.WriteLine($"{{{str}}}");

            Assert.Equal(expected.Length, Marshal.SizeOf <T>());
            Assert.Equal(expected.Length, serialized.Length);
            Assert.Equal(expected, serialized);

            return(serialized);
        }
        public void SerializeSdbData(Stream stream)
        {
            var head = new SdbDataHead(
                _fileFormat,
                ClassIdMap,
                SchemaTypes,
                Particles,
                ParticleIndexes,
                Attributes);

            head.Validate();

            void ValidatePosition(int position)
            {
                if (position != stream.Position)
                {
                    throw new InvalidDataException();
                }
            }

            ValidatePosition(0);
            SdbData.Serialize(head, stream);

            ValidatePosition(head.ClassIds.Offset);
            SdbData.Serialize(ClassIdMap, stream);

            ValidatePosition(head.SchemaType.Offset);
            SdbData.Serialize(SchemaTypes, stream);

            ValidatePosition(head.Particles.Offset);
            SdbData.Serialize(Particles, stream);

            ValidatePosition(head.ParticleChildren.Offset);
            SdbData.Serialize(ParticleIndexes, stream);

            ValidatePosition(head.Attributes.Offset);
            SdbData.Serialize(Attributes, stream);
        }