Example #1
0
        public void Read(SignatureReader rdr)
        {
            m = rdr.ReadElementType();
            if (m != ElementType.Modifier_Optional && m != ElementType.Modifier_Required)
            {
                throw new InvalidOperationException();
            }
            TablesHeap h = rdr.BaseStream.Root[MetadataStreamType.Tables].Heap as TablesHeap;

            t = new TableToken(h);

            int  len = Math.Max(h[TableType.TypeDef].Rows.Count, Math.Max(h[TableType.TypeRef].Rows.Count, h[TableType.TypeSpec].Rows.Count));
            uint tkn;

            if (len > ushort.MaxValue)
            {
                tkn = rdr.ReadUInt32();
            }
            else
            {
                tkn = rdr.ReadUInt16();
            }

            switch (tkn & 0x3)
            {
            case 0:
                t.Token = new MetadataToken(MetadataTokenType.TypeDef, (uint)tkn >> 2); break;

            case 1:
                t.Token = new MetadataToken(MetadataTokenType.TypeRef, (uint)tkn >> 2); break;

            case 2:
                t.Token = new MetadataToken(MetadataTokenType.TypeSpec, (uint)tkn >> 2); break;
            }
        }
Example #2
0
        }                                                                 //optional beginning, including

        public void Read(SignatureReader rdr, int c)
        {
            sen = -1;
            for (int i = 0; i < c; i++)
            {
                if ((byte)rdr.GetElementTypeAhead() == 0x41)
                {
                    sen = i;
                    rdr.ReadElementType();
                }
                ParamElement p = new ParamElement();
                p.Read(rdr);
                Items.Add(p);
            }
        }