コード例 #1
0
        private void Allocate(TagIdent ident, int size)
        {
            //create virtual stream to write into
            var tagCacheStream = new VirtualStream(Index[Index.GlobalsIdent].VirtualAddress);

            var binaryWriter = new BinaryWriter(tagCacheStream);

            for (var i = 0; i < Index.Count; ++i)
            {
                var datum = Index[i];

                // is this address affected by the shift?
                if (datum.Identifier == ident)
                {
                    var alignment = Guerilla.Guerilla.AlignmentOf(Halo2.GetTypeOf(Index[ident].Class));
                    datum.VirtualAddress = binaryWriter.BaseStream.Align(alignment);
                    binaryWriter.Write(new byte[size]);
                    datum.Length = size;
                    Index.Update(datum.Identifier, datum);
                }
                else
                {
                    var data   = Deserialize(datum.Identifier);
                    var length = binaryWriter.BaseStream.Length;
                    binaryWriter.Write(data);
                    binaryWriter.Seek(0, SeekOrigin.End);
                    length       = (int)binaryWriter.BaseStream.Length - length;
                    datum.Length = (int)length;
                    Index.Update(datum.Identifier, datum);
                }
            }
            binaryWriter.WritePadding(512);
        }
コード例 #2
0
        static void DeserializeTag(this BinaryReader sourceReader, object item, FieldInfo field)
        {
            var reference = sourceReader.ReadTagReference();

            Source.Position = Source[reference.Ident].Meta.VirtualAddress;

            field.SetValue(item, Deserialize(sourceReader, Halo2.GetTypeOf(reference.Class)));
        }
コード例 #3
0
        public T Deserialize <T>(TagIdent ident) where T : GuerillaBlock
        {
            GuerillaBlock deserializedTag;

            if (_deserializedTagCache.TryGetValue(ident, out deserializedTag))
            {
                return(( T )deserializedTag);
            }

            var type = Halo2.GetTypeOf(Index[ident].Class);

            if (type == null)
            {
                return(null);
            }

            Seek(ident);
            _deserializedTagCache[ident] = Deserialize(type);
            _tagHashDictionary[ident]    = CalculateHash(ident);

            return(( T )_deserializedTagCache[ident]);
        }
コード例 #4
0
ファイル: ClassTreeNode.cs プロジェクト: mksbamford/Moonfxsh
 public ClassTreeNode(TagClass @class)
 {
     Text  = Halo2.GetTypeOf(@class).Name;
     Class = @class;
 }