Ejemplo n.º 1
0
        public MethodMeta(ISharedTable stringTable, TypeMeta declaringType, BinaryReader reader)
        {
            byte[] rawData = reader.ReadBytes(12);

            this.name          = stringTable.FetchString(rawData[0] | (rawData[1] << 8) | (rawData[2] << 16));
            this.declaringType = stringTable.FetchString(rawData[3] | (rawData[4] << 8) | (rawData[5] << 16));
            this.returnType    = stringTable.FetchString(rawData[6] | (rawData[7] << 8) | (rawData[8] << 16));

            byte flags = rawData[9];

            this.isPublic = (flags & 1) != 0;

            int length = rawData[10] | (rawData[11] << 8);

            this.parametersType = new string[length];
            this.parametersName = new string[length];

            rawData = reader.ReadBytes(length * 6);

            for (int i = 0, j = 0; j < length; ++j, i += 6)
            {
                this.parametersType[j] = stringTable.FetchString(rawData[i] | (rawData[i + 1] << 8) | (rawData[i + 2] << 16));
                this.parametersName[j] = stringTable.FetchString(rawData[i + 3] | (rawData[i + 4] << 8) | (rawData[i + 5] << 16));
            }

            if ((flags & 4) != 0)
            {
                this.errorMessage = stringTable.FetchString(reader.ReadInt24());
            }
        }
Ejemplo n.º 2
0
 public void     Save(ISharedTable stringTable, BinaryWriter writer)
 {
     writer.WriteInt24(stringTable.RegisterString(this.name));
     writer.WriteInt24(stringTable.RegisterString(this.errorMessage));
     writer.WriteInt24(stringTable.RegisterString(this.declaringType));
     writer.WriteInt24(stringTable.RegisterString(this.type));
 }
        public AssemblyMeta(ISharedTable sharedStringTable, BinaryReader reader)
        {
            this.assemblyPath = reader.ReadString();

            this.friendAssemblies = new string[reader.ReadUInt16()];

            byte[] rawData = reader.ReadBytes(this.friendAssemblies.Length * 3);

            for (int i = 0, j = 0, max = this.friendAssemblies.Length; i < max; ++i, j += 3)
            {
                this.friendAssemblies[i] = sharedStringTable.FetchString(rawData[j] | (rawData[j + 1] << 8) | (rawData[j + 2] << 16));
            }

            this.types = new TypeMeta[reader.ReadInt32()];

            rawData = reader.ReadBytes(this.types.Length * 3);

            for (int i = 0, j = 0, max = this.types.Length; i < max; ++i, j += 3)
            {
                try
                {
                    TypeMeta typeMeta = sharedStringTable.FetchType(rawData[j] | (rawData[j + 1] << 8) | (rawData[j + 2] << 16));
                    this.types[i] = typeMeta;
                    this.typeCache.Add(typeMeta.FullName, typeMeta);
                }
                catch (Exception)
                {
                    Debug.LogError("Type #" + i + " failed in assembly \"" + this.assemblyPath + "\".");
                    throw;
                }
            }
        }
Ejemplo n.º 4
0
        public FieldMeta(ISharedTable stringTable, TypeMeta declaringType, BinaryReader reader)
        {
            byte[] rawData = reader.ReadBytes(12);

            this.name          = stringTable.FetchString(rawData[0] | (rawData[1] << 8) | (rawData[2] << 16));
            this.errorMessage  = stringTable.FetchString(rawData[3] | (rawData[4] << 8) | (rawData[5] << 16));
            this.declaringType = stringTable.FetchString(rawData[6] | (rawData[7] << 8) | (rawData[8] << 16));
            this.type          = stringTable.FetchString(rawData[9] | (rawData[10] << 8) | (rawData[11] << 16));
        }
Ejemplo n.º 5
0
 public void     Save(ISharedTable stringTable, BinaryWriter writer)
 {
     writer.WriteInt24(stringTable.RegisterString(this.name));
     writer.WriteInt24(stringTable.RegisterString(this.declaringType));
     writer.WriteInt24(stringTable.RegisterString(this.type));
     writer.Write((Byte)((this.hasAdd ? 1 : 0) | (this.hasRemove ? 2 : 0) | (this.errorMessage != null ? 4 : 0)));
     if (this.errorMessage != null)
     {
         writer.WriteInt24(stringTable.RegisterString(this.errorMessage));
     }
 }
Ejemplo n.º 6
0
        public EventMeta(ISharedTable stringTable, TypeMeta declaringType, BinaryReader reader)
        {
            byte[] rawData = reader.ReadBytes(10);

            this.name          = stringTable.FetchString(rawData[0] | (rawData[1] << 8) | (rawData[2] << 16));
            this.declaringType = stringTable.FetchString(rawData[3] | (rawData[4] << 8) | (rawData[5] << 16));
            this.type          = stringTable.FetchString(rawData[6] | (rawData[7] << 8) | (rawData[8] << 16));

            byte flags = rawData[9];

            this.hasAdd    = (flags & 1) != 0;
            this.hasRemove = (flags & 2) != 0;

            if ((flags & 4) != 0)
            {
                this.errorMessage = stringTable.FetchString(reader.ReadInt24());
            }
        }
Ejemplo n.º 7
0
        public UnityMeta(BinaryReader reader, ISharedTable sharedStringTable)
        {
            this.version        = reader.ReadString();
            this.assembliesMeta = new AssemblyMeta[reader.ReadUInt16()];

            for (int i = 0, max = this.assembliesMeta.Length; i < max; ++i)
            {
                try
                {
                    this.assembliesMeta[i] = sharedStringTable.FetchAssembly(reader.ReadInt24());
                }
                catch (Exception)
                {
                    Debug.LogError("Assembly #" + i + " failed in Unity " + this.version + ".");
                    throw;
                }
            }
        }
Ejemplo n.º 8
0
        public void     Save(ISharedTable stringTable, BinaryWriter writer)
        {
            writer.WriteInt24(stringTable.RegisterString(this.name));
            writer.WriteInt24(stringTable.RegisterString(this.declaringType));
            writer.WriteInt24(stringTable.RegisterString(this.returnType));
            writer.Write((Byte)((this.isPublic ? 1 : 0) | (this.errorMessage != null ? 4 : 0)));
            writer.Write((UInt16)this.parametersType.Length);

            for (int i = 0, max = this.parametersType.Length; i < max; ++i)
            {
                writer.WriteInt24(stringTable.RegisterString(this.parametersType[i]));
                writer.WriteInt24(stringTable.RegisterString(this.parametersName[i]));
            }

            if (this.errorMessage != null)
            {
                writer.WriteInt24(stringTable.RegisterString(this.errorMessage));
            }
        }
Ejemplo n.º 9
0
        public TypeMeta(ISharedTable stringTable, BinaryReader reader)
        {
            byte[] rawData = reader.ReadBytes(7);

            this.@namespace = stringTable.FetchString(rawData[0] | (rawData[1] << 8) | (rawData[2] << 16));
            this.name       = stringTable.FetchString(rawData[3] | (rawData[4] << 8) | (rawData[5] << 16));

            byte flags = rawData[6];

            this.isPublic = (flags & 1) != 0;
            if ((flags & 4) != 0)
            {
                this.errorMessage = stringTable.FetchString(reader.ReadInt24());
            }

            if ((flags & 8) != 0)
            {
                this.events = new EventMeta[reader.ReadUInt16()];
            }
            else
            {
                this.events = new EventMeta[reader.ReadByte()];
            }

            for (int i = 0, max = this.events.Length; i < max; ++i)
            {
                this.events[i] = stringTable.FetchEvent(reader.ReadInt24());
            }

            if ((flags & 16) != 0)
            {
                this.fields = new FieldMeta[reader.ReadUInt16()];
            }
            else
            {
                this.fields = new FieldMeta[reader.ReadByte()];
            }

            for (int i = 0, max = this.fields.Length; i < max; ++i)
            {
                this.fields[i] = stringTable.FetchField(reader.ReadInt24());
            }

            if ((flags & 32) != 0)
            {
                this.properties = new PropertyMeta[reader.ReadUInt16()];
            }
            else
            {
                this.properties = new PropertyMeta[reader.ReadByte()];
            }

            for (int i = 0, max = this.properties.Length; i < max; ++i)
            {
                this.properties[i] = stringTable.FetchProperty(reader.ReadInt24());
            }

            if ((flags & 64) != 0)
            {
                this.methods = new MethodMeta[reader.ReadUInt16()];
            }
            else
            {
                this.methods = new MethodMeta[reader.ReadByte()];
            }

            for (int i = 0, max = this.methods.Length; i < max; ++i)
            {
                this.methods[i] = stringTable.FetchMethod(reader.ReadInt24());
            }
        }
Ejemplo n.º 10
0
        public void     Save(ISharedTable stringTable, BinaryWriter writer)
        {
            bool manyEvents     = this.events.Length > 256;
            bool manyFields     = this.fields.Length > 256;
            bool manyProperties = this.properties.Length > 256;
            bool manyMethods    = this.methods.Length > 256;

            writer.WriteInt24(stringTable.RegisterString(this.@namespace));
            writer.WriteInt24(stringTable.RegisterString(this.name));

            byte b = (Byte)((this.IsPublic ? 1 : 0) |
                            (this.ErrorMessage != null ? 4 : 0) |
                            (manyEvents == true ? 8 : 0) |
                            (manyFields == true ? 16 : 0) |
                            (manyProperties == true ? 32 : 0) |
                            (manyMethods == true ? 64 : 0));

            writer.Write(b);

            if (this.ErrorMessage != null)
            {
                writer.WriteInt24(stringTable.RegisterString(this.errorMessage));
            }

            if (manyEvents == true)
            {
                writer.Write((UInt16)this.events.Length);
            }
            else
            {
                writer.Write((Byte)this.events.Length);
            }

            for (int i = 0, max = this.events.Length; i < max; ++i)
            {
                writer.WriteInt24(stringTable.RegisterEvent(this.events[i]));
            }

            if (manyFields == true)
            {
                writer.Write((UInt16)this.fields.Length);
            }
            else
            {
                writer.Write((Byte)this.fields.Length);
            }

            for (int i = 0, max = this.fields.Length; i < max; ++i)
            {
                writer.WriteInt24(stringTable.RegisterField(this.fields[i]));
            }

            if (manyProperties == true)
            {
                writer.Write((UInt16)this.properties.Length);
            }
            else
            {
                writer.Write((Byte)this.properties.Length);
            }

            for (int i = 0, max = this.properties.Length; i < max; ++i)
            {
                writer.WriteInt24(stringTable.RegisterProperty(this.properties[i]));
            }

            if (manyMethods == true)
            {
                writer.Write((UInt16)this.methods.Length);
            }
            else
            {
                writer.Write((Byte)this.methods.Length);
            }

            for (int i = 0, max = this.methods.Length; i < max; ++i)
            {
                writer.WriteInt24(stringTable.RegisterMethod(this.methods[i]));
            }
        }