Esempio n. 1
0
        public static void Write(this Stream output, GuerillaBlock block)
        {
            var queueableBinaryWriter = new QueueableBinaryWriter(output,
                                                                  (int)output.Position + block.SerializedSize);

            block.QueueWrites(queueableBinaryWriter);
            block.Write_(queueableBinaryWriter);
            queueableBinaryWriter.WriteQueue();
        }
        public static IEnumerable <GuerillaBlock> Children(this GuerillaBlock guerillaBlock)
        {
            var blockType = guerillaBlock.GetType( );

            if (!FieldInfoDictionary.ContainsKey(blockType))
            {
                FieldInfoDictionary[blockType] = blockType.Fields(null).ToArray( );
            }
            var fields = FieldInfoDictionary[blockType];

            foreach (var fieldInfo in fields)
            {
                if (IsGuerillaBlockStruct(fieldInfo))
                {
                    if (!Accessors.ContainsKey(fieldInfo))
                    {
                        Accessors[fieldInfo] = fieldInfo.DelegateForGetFieldValue( );
                    }
                    var block = ( GuerillaBlock )Accessors[fieldInfo].Invoke(guerillaBlock);
                    yield return(block);

                    foreach (var child in block.Children(  ))
                    {
                        yield return(child);
                    }
                }
                if (IsGuerillaBlockArray(fieldInfo))
                {
                    if (!Accessors.ContainsKey(fieldInfo))
                    {
                        Accessors[fieldInfo] = fieldInfo.DelegateForGetFieldValue();
                    }
                    var elements = (GuerillaBlock[])Accessors[fieldInfo].Invoke(guerillaBlock);
                    foreach (var element in elements)
                    {
                        yield return(element);

                        foreach (var child in element.Children(  ))
                        {
                            yield return(child);
                        }
                    }
                }
            }
        }
        public static IEnumerable <TagReference> GetReferences(this GuerillaBlock guerillaBlock)
        {
            var fields = guerillaBlock.GetType( ).GetRuntimeFields( );

            foreach (var fieldInfo in fields)
            {
                if (IsReference(fieldInfo))
                {
                    yield return((TagReference)fieldInfo.Get(guerillaBlock));
                }

                if (IsIdent(fieldInfo))
                {
                    yield return(new TagReference(TagClass.Empty, (TagIdent)fieldInfo.Get(guerillaBlock)));
                }

                if (IsGuerillaBlockStruct(fieldInfo))
                {
                    foreach (var reference in GetReferences(( GuerillaBlock )fieldInfo.Get(guerillaBlock)))
                    {
                        yield return(reference);
                    }
                }
                if (IsGuerillaBlockArray(fieldInfo))
                {
                    var elements = ( GuerillaBlock[] )fieldInfo.Get(guerillaBlock);
                    foreach (var element in elements)
                    {
                        foreach (var reference in GetReferences(element))
                        {
                            yield return(reference);
                        }
                    }
                }
            }
        }
        public static TagClass?GetTagClass(this GuerillaBlock guerillaBlock)
        {
            var customAttribute = (TagClassAttribute)guerillaBlock.GetType(  ).GetCustomAttribute(typeof(TagClassAttribute));

            return(customAttribute.TagClass);
        }
Esempio n. 5
0
 public static void Write(this BinaryWriter binaryWriter, GuerillaBlock block)
 {
     binaryWriter.WritePadding(block.Alignment);
     block.Write(binaryWriter, (int)binaryWriter.BaseStream.Position + block.SerializedSize);
 }