/// <summary> /// Loads the generic param constraints. /// </summary> private void LoadGenericParams() { Token maxToken = GetMaxTokenValue(TableType.GenericParam); foreach (Token token in new Token(TableType.GenericParam, 1).Upto(maxToken)) { GenericParamRow row = metadataProvider.ReadGenericParamRow(token); string name = GetString(row.NameStringIdx); // The following switch matches the AttributeTargets enumeration against // metadata tables, which make valid targets for an attribute. switch (row.Owner.Table) { case TableType.TypeDef: types[row.Owner.RID - 1].GenericParameters.Add(new GenericParameter(name, row.Flags)); break; case TableType.MethodDef: methods[row.Owner.RID - 1].GenericParameters.Add(new GenericParameter(name, row.Flags)); break; default: throw new NotImplementedException(); } } }
/// <summary> /// Reads the specified token. /// </summary> /// <param name="token">The token.</param> /// <param name="result">The result.</param> public void Read(TokenTypes token, out GenericParamRow result) { if ((token & TokenTypes.TableMask) != TokenTypes.GenericParam) { throw new ArgumentException("Invalid token type for GenericParamRow.", "token"); } using (BinaryReader reader = CreateReaderForToken(token)) { result = new GenericParamRow(reader.ReadUInt16(), (GenericParamAttributes)reader.ReadUInt16(), ReadIndexValue(reader, IndexType.TypeOrMethodDef), ReadIndexValue(reader, IndexType.StringHeap)); } }
void ReadGenericParameters() { if (!m_tHeap.HasTable(GenericParamTable.RId)) { return; } GenericParamTable gpTable = m_tableReader.GetGenericParamTable(); m_genericParameters = new GenericParameter [gpTable.Rows.Count]; for (int i = 0; i < gpTable.Rows.Count; i++) { GenericParamRow gpRow = gpTable [i]; IGenericParameterProvider owner; if (gpRow.Owner.TokenType == TokenType.Method) { owner = GetMethodDefAt(gpRow.Owner.RID); } else if (gpRow.Owner.TokenType == TokenType.TypeDef) { owner = GetTypeDefAt(gpRow.Owner.RID); } else { throw new ReflectionException("Unknown owner type for generic parameter"); } GenericParameter gp = new GenericParameter((int)gpRow.Number, owner); gp.Attributes = gpRow.Flags; gp.Name = MetadataRoot.Streams.StringsHeap [gpRow.Name]; gp.MetadataToken = MetadataToken.FromMetadataRow(TokenType.GenericParam, i); owner.GenericParameters.Add(gp); m_genericParameters [i] = gp; } }
public virtual void VisitGenericParamRow(GenericParamRow row) { }
public GenericParamRowExt(IMetadataProvider metadata, GenericParamRow row) : base(metadata) { this.row = row; }
void IMetadataProvider.Read(TokenTypes token, out GenericParamRow result) { TableHeap theap = (TableHeap)_streams[(int)HeapType.Tables]; theap.Read(token, out result); }