public AssemblyReference ImportAssembly(IAssemblyDescriptor assemblyInfo) { var table = _tableStreamBuffer.GetTable <AssemblyReference>(); var reference = table.FirstOrDefault(x => _signatureComparer.MatchAssemblies(x, assemblyInfo)); if (reference == null) { table.Add(reference = new AssemblyReference(assemblyInfo)); } return(reference); }
private static void VerifyImportedReference(TableStream tableStream, MemberReference reference, MemberReference newReference) { Assert.AreNotSame(reference, newReference, "Imported reference is the same as original."); Assert.IsTrue(_comparer.MatchMembers(reference, newReference), "Imported reference does not match original."); Assert.IsTrue(tableStream.GetTable <MemberReference>().Contains(newReference), "Imported reference not added to table."); Assert.IsTrue(tableStream.GetTable <TypeReference>().Contains(newReference.DeclaringType), "Imported reference's declaring type not added to table."); }
protected override PropertyPtr ReadMember(MetadataToken token, ReadingContext context) { return(new PropertyPtr(Header, token, new MetadataRow <uint>() { Column1 = context.Reader.ReadIndex(TableStream.GetTable <PropertyDefinition>().IndexSize) })); }
public override uint GetElementByteCount() { var definitionTable = TableStream.GetTable <TypeDefinition>(); return((uint)definitionTable.IndexSize + (uint)definitionTable.IndexSize); }
public override uint GetElementByteCount() { return(sizeof(ushort) + (uint)TableStream.GetIndexEncoder(CodedIndex.MemberForwarded).IndexSize + (uint)TableStream.StringIndexSize + (uint)TableStream.GetTable <ModuleReference>().IndexSize); }
protected override MetadataRow <uint> ReadRow(ReadingContext context, MetadataToken token) { return(new MetadataRow <uint>(token) { Column1 = context.Reader.ReadIndex(TableStream.GetTable(MetadataTokenType.Field).IndexSize) }); }
protected override void WriteRow(WritingContext context, MetadataRow <uint, uint> row) { var writer = context.Writer; writer.WriteIndex(TableStream.GetTable(MetadataTokenType.TypeDef).IndexSize, row.Column1); writer.WriteIndex(TableStream.GetIndexEncoder(CodedIndex.TypeDefOrRef).IndexSize, row.Column2); }
public override uint GetElementByteCount() { return(sizeof(uint) + sizeof(uint) + sizeof(uint) + (uint)TableStream.GetTable <AssemblyReference>().IndexSize); }
protected override void WriteRow(WritingContext context, MetadataRow <DataSegment, uint> row) { var writer = context.Writer; writer.WriteUInt32((uint)row.Column1.GetRva(context.Assembly)); writer.WriteIndex(TableStream.GetTable(MetadataTokenType.Field).IndexSize, row.Column2); }
protected override void WriteRow(WritingContext context, MetadataRow <uint, uint> row) { var writer = context.Writer; writer.WriteIndex(TableStream.GetTable(MetadataTokenType.Method).IndexSize, row.Column1); writer.WriteIndex(TableStream.BlobIndexSize, row.Column2); }
protected override void WriteRow(WritingContext context, MetadataRow <MethodSemanticsAttributes, uint, uint> row) { var writer = context.Writer; writer.WriteUInt16((ushort)row.Column1); writer.WriteIndex(TableStream.GetTable(MetadataTokenType.Method).IndexSize, row.Column2); writer.WriteIndex(TableStream.GetIndexEncoder(CodedIndex.HasSemantics).IndexSize, row.Column3); }
protected override void WriteMember(WritingContext context, AssemblyRefProcessor member) { var writer = context.Writer; var row = member.MetadataRow; writer.WriteUInt32(row.Column1); writer.WriteIndex(TableStream.GetTable <AssemblyReference>().IndexSize, row.Column2); }
protected override void WriteMember(WritingContext context, MethodSpecification member) { var writer = context.Writer; var row = member.MetadataRow; writer.WriteIndex(TableStream.GetTable <MethodDefinition>().IndexSize, row.Column1); writer.WriteIndex(TableStream.BlobIndexSize, row.Column2); }
protected override void WriteMember(WritingContext context, InterfaceImplementation member) { var writer = context.Writer; var row = member.MetadataRow; writer.WriteIndex(TableStream.GetTable <TypeDefinition>().IndexSize, row.Column1); writer.WriteIndex(TableStream.GetIndexEncoder(CodedIndex.TypeDefOrRef).IndexSize, row.Column2); }
protected override void WriteMember(WritingContext context, PropertyMap member) { var writer = context.Writer; var row = member.MetadataRow; writer.WriteIndex(TableStream.GetTable <TypeDefinition>().IndexSize, row.Column1); writer.WriteIndex(TableStream.GetTable <PropertyDefinition>().IndexSize, row.Column2); }
public override uint GetElementByteCount() { var encoder = TableStream.GetIndexEncoder(CodedIndex.MethodDefOrRef); return((uint)TableStream.GetTable <TypeDefinition>().IndexSize + (uint)encoder.IndexSize + (uint)encoder.IndexSize); }
protected override void WriteRow(WritingContext context, MetadataRow <uint, uint> row) { var writer = context.Writer; var definitionTable = TableStream.GetTable(MetadataTokenType.TypeDef); writer.WriteIndex(definitionTable.IndexSize, row.Column1); writer.WriteIndex(definitionTable.IndexSize, row.Column2); }
protected override void WriteRow(WritingContext context, MetadataRow <ushort, uint, uint> row) { var writer = context.Writer; writer.WriteUInt16(row.Column1); writer.WriteUInt32(row.Column2); writer.WriteIndex(TableStream.GetTable(MetadataTokenType.TypeDef).IndexSize, row.Column3); }
protected override void WriteMember(WritingContext context, FieldRva member) { var writer = context.Writer; var row = member.MetadataRow; writer.WriteUInt32(row.Column1); writer.WriteIndex(TableStream.GetTable <FieldDefinition>().IndexSize, row.Column2); }
protected override void WriteMember(WritingContext context, GenericParameterConstraint member) { var writer = context.Writer; var row = member.MetadataRow; writer.WriteIndex(TableStream.GetTable <GenericParameter>().IndexSize, row.Column1); writer.WriteIndex(TableStream.GetIndexEncoder(CodedIndex.TypeDefOrRef).IndexSize, row.Column2); }
public override uint GetElementByteCount() { return(sizeof(uint) + // Rva sizeof(ushort) + // ImplAttrbibutes sizeof(ushort) + // Attributes (uint)TableStream.StringIndexSize + // Name (uint)TableStream.BlobIndexSize + // Signature (uint)TableStream.GetTable <ParameterDefinition>().IndexSize); // ParamList }
public override uint GetElementByteCount() { return(sizeof(uint) + // Attributes (uint)TableStream.StringIndexSize + // Name (uint)TableStream.StringIndexSize + // Namespace (uint)TableStream.GetIndexEncoder(CodedIndex.TypeDefOrRef).IndexSize + // BaseType (uint)TableStream.GetTable <FieldDefinition>().IndexSize + // FieldList (uint)TableStream.GetTable <MethodDefinition>().IndexSize); // MethodList }
protected override void WriteMember(WritingContext context, NestedClass member) { var writer = context.Writer; var row = member.MetadataRow; var definitionTable = TableStream.GetTable <TypeDefinition>(); writer.WriteIndex(definitionTable.IndexSize, row.Column1); writer.WriteIndex(definitionTable.IndexSize, row.Column2); }
protected override void WriteRow(WritingContext context, MetadataRow <ImplementationMapAttributes, uint, uint, uint> row) { var writer = context.Writer; writer.WriteUInt16((ushort)row.Column1); writer.WriteIndex(TableStream.GetIndexEncoder(CodedIndex.MemberForwarded).IndexSize, row.Column2); writer.WriteIndex(TableStream.StringIndexSize, row.Column3); writer.WriteIndex(TableStream.GetTable(MetadataTokenType.ModuleRef).IndexSize, row.Column4); }
protected override void WriteMember(WritingContext context, MethodSemantics member) { var writer = context.Writer; var row = member.MetadataRow; writer.WriteUInt16(row.Column1); writer.WriteIndex(TableStream.GetTable <MethodDefinition>().IndexSize, row.Column2); writer.WriteIndex(TableStream.GetIndexEncoder(CodedIndex.HasSemantics).IndexSize, row.Column3); }
protected override void WriteMember(WritingContext context, ClassLayout member) { var writer = context.Writer; var row = member.MetadataRow; writer.WriteUInt16(row.Column1); writer.WriteUInt32(row.Column2); writer.WriteIndex(TableStream.GetTable <TypeDefinition>().IndexSize, row.Column3); }
private int GetDataSize(uint fieldRid) { var fieldTable = (FieldDefinitionTable)TableStream.GetTable(MetadataTokenType.Field); var blobReader = TableStream.MetadataHeader.GetStream <BlobStream>().CreateBlobReader(fieldTable[(int)(fieldRid - 1)].Column3); blobReader.ReadByte(); var elementType = (ElementType)blobReader.ReadByte(); switch (elementType) { case ElementType.Boolean: case ElementType.I1: case ElementType.U1: return(sizeof(byte)); case ElementType.I2: case ElementType.U2: return(sizeof(ushort)); case ElementType.I4: case ElementType.U4: case ElementType.R4: return(sizeof(uint)); case ElementType.I8: case ElementType.U8: case ElementType.R8: return(sizeof(ulong)); case ElementType.Class: case ElementType.ValueType: uint codedIndex; if (!blobReader.TryReadCompressedUInt32(out codedIndex)) { return(0); } var typeToken = TableStream.GetIndexEncoder(CodedIndex.TypeDefOrRef).DecodeIndex(codedIndex); if (typeToken.TokenType == MetadataTokenType.TypeDef) { var classLayoutTable = (ClassLayoutTable)TableStream.GetTable(MetadataTokenType.ClassLayout); var row = classLayoutTable.GetRowByKey(2, typeToken.Rid); if (row != null) { return((int)row.Column2); } } return(0); case ElementType.I: case ElementType.U: // TODO; default: return(0); } }
protected override GenericParameterConstraint ReadMember(MetadataToken token, ReadingContext context) { var reader = context.Reader; return(new GenericParameterConstraint(Header, token, new MetadataRow <uint, uint>() { Column1 = reader.ReadIndex(TableStream.GetTable <GenericParameter>().IndexSize), Column2 = reader.ReadIndex(TableStream.GetIndexEncoder(CodedIndex.TypeDefOrRef).IndexSize) })); }
protected override void WriteMember(WritingContext context, PInvokeImplementation member) { var writer = context.Writer; var row = member.MetadataRow; writer.WriteUInt16(row.Column1); writer.WriteIndex(TableStream.GetIndexEncoder(CodedIndex.MemberForwarded).IndexSize, row.Column2); writer.WriteIndex(TableStream.StringIndexSize, row.Column3); writer.WriteIndex(TableStream.GetTable <ModuleReference>().IndexSize, row.Column4); }
protected override FieldRva ReadMember(MetadataToken token, ReadingContext context) { var reader = context.Reader; return(new FieldRva(Header, token, new MetadataRow <uint, uint>() { Column1 = reader.ReadUInt32(), Column2 = reader.ReadIndex(TableStream.GetTable <FieldDefinition>().IndexSize) })); }