Example #1
0
        public void DeserializeNestedTypes_FromSpan()
        {
            var tagStruct = (StructTestTag)BlamSerializer.Deserialize(typeof(StructTestTag), testTagData, 0, 100, null);

            AssertData(tagStruct);

            tagStruct = BlamSerializer.Deserialize <StructTestTag>(testTagData, 0, 100, null);
            AssertData(tagStruct);

            var tagRef = (ClassTestTag)BlamSerializer.Deserialize(typeof(ClassTestTag), testTagData, 0, 100, null);

            AssertData(tagRef);

            tagRef = BlamSerializer.Deserialize <ClassTestTag>(testTagData, 0, 100, null);
            AssertData(tagRef);


            var tagStructInstance = new StructTestTag();

            tagStructInstance = (StructTestTag)BlamSerializer.DeserializeInto(tagStructInstance, typeof(StructTestTag), testTagData, 0, 100, null);
            AssertData(tagStructInstance);

            tagStructInstance = new StructTestTag();
            tagStructInstance = BlamSerializer.DeserializeInto <StructTestTag>(tagStructInstance, testTagData, 0, 100, null);
            AssertData(tagStructInstance);

            var tagRefInstance = new ClassTestTag();

            tagRefInstance = (ClassTestTag)BlamSerializer.DeserializeInto(tagRefInstance, typeof(ClassTestTag), testTagData, 0, 100, null);
            AssertData(tagRefInstance);

            tagRefInstance = new ClassTestTag();
            tagRefInstance = BlamSerializer.DeserializeInto <ClassTestTag>(tagRefInstance, testTagData, 0, 100, null);
            AssertData(tagRefInstance);
        }
Example #2
0
        private TMap CreateMap <TMap>(MapStream reader, byte streamId = 0) where TMap : IMap, new()
        {
            var map = new TMap();

            BlamSerializer.DeserializeInto(map, reader.GetStream(streamId));
            map.Load(streamId, reader);
            return(map);
        }
Example #3
0
        public static BaseTag CreateTag(uint id, string name, TagIndexEntry index, IH2Map map, MapStream reader)
        {
            var tagType = GetTypeForTag(index.Tag);

            BaseTag tag;

            if (tagType == null)
            {
                tag = new UnknownTag(id, index.Tag.ToString())
                {
                    Name   = name,
                    Length = (uint)index.DataSize,
                    Offset = (uint)index.Offset.Value,
                    InternalSecondaryMagic = map.SecondaryMagic + index.Offset.Value
                };
            }
            else
            {
                BaseTag instance;

                // PERF: check ctor existence ahead of time
                try
                {
                    //var ctor = tagType.GetConstructor(new[] { typeof(uint) });
                    //instance = (BaseTag)ctor.Invoke(new object[] { id });
                    instance = Activator.CreateInstance(tagType, new object[] { id }) as BaseTag;
                }
                catch
                {
                    instance = (BaseTag)FormatterServices.GetUninitializedObject(tagType);
                }

                tag = (BaseTag)BlamSerializer.DeserializeInto(instance,
                                                              tagType,
                                                              reader.GetStream(map.OriginFile),
                                                              index.Offset.Value,
                                                              map.SecondaryMagic,
                                                              map);
            }

            tag.Name          = name;
            tag.TagIndexEntry = index;
            tag.DataFile      = map.OriginFile;
            tag.PopulateExternalData(reader);

            return(tag);
        }
Example #4
0
        public void DeserializeNestedTypes_FromStream()
        {
            var tagStruct = (StructTestTag)BlamSerializer.Deserialize(typeof(StructTestTag), new MemoryStream(testTagData), 0, 100, null);

            AssertData(tagStruct);

            tagStruct = BlamSerializer.Deserialize <StructTestTag>(new MemoryStream(testTagData), 0, 100, null);
            AssertData(tagStruct);

            var tagRef = (ClassTestTag)BlamSerializer.Deserialize(typeof(ClassTestTag), new MemoryStream(testTagData), 0, 100, null);

            AssertData(tagRef);

            tagRef = BlamSerializer.Deserialize <ClassTestTag>(new MemoryStream(testTagData), 0, 100, null);
            AssertData(tagRef);

            var offsetData = new byte[24 + testTagData.Length];

            testTagData.CopyTo(offsetData, 20);

            tagRef = BlamSerializer.Deserialize <ClassTestTag>(new MemoryStream(offsetData), 20, 80, null);
            AssertData(tagRef);

            var tagStructInstance = new StructTestTag();

            tagStructInstance = (StructTestTag)BlamSerializer.DeserializeInto(tagStructInstance, typeof(StructTestTag), new MemoryStream(testTagData), 0, 100, null);
            AssertData(tagStructInstance);

            tagStructInstance = new StructTestTag();
            tagStructInstance = BlamSerializer.DeserializeInto <StructTestTag>(tagStructInstance, new MemoryStream(testTagData), 0, 100, null);
            AssertData(tagStructInstance);

            var tagRefInstance = new ClassTestTag();

            tagRefInstance = (ClassTestTag)BlamSerializer.DeserializeInto(tagRefInstance, typeof(ClassTestTag), new MemoryStream(testTagData), 0, 100, null);
            AssertData(tagRefInstance);

            tagRefInstance = new ClassTestTag();
            tagRefInstance = BlamSerializer.DeserializeInto <ClassTestTag>(tagRefInstance, new MemoryStream(testTagData), 0, 100, null);
            AssertData(tagRefInstance);
        }