/// <inheritdoc /> public ISegment ResolveFieldData(IMetadata metadata, FieldRvaRow fieldRvaRow) { if (fieldRvaRow.Data is null) { return(null); } if (fieldRvaRow.Data.IsBounded) { return(fieldRvaRow.Data.GetSegment()); } if (fieldRvaRow.Data.CanRead) { var table = metadata .GetStream <TablesStream>() .GetTable <FieldDefinitionRow>(TableIndex.Field); if (fieldRvaRow.Field > table.Count) { throw new ArgumentException("Invalid Field column value."); } var field = table.GetByRid(fieldRvaRow.Field); int valueSize = DetermineFieldSize(metadata, field); var reader = fieldRvaRow.Data.CreateReader(); return(DataSegment.FromReader(reader, valueSize)); } throw new NotSupportedException("Invalid or unsupported data column."); }
private void AddFieldRva(MetadataToken ownerToken, FieldDefinition field) { // Don't emit any field rva rows if no initial data was specified. if (field.FieldRva is null) { return; } var table = Metadata.TablesStream.GetSortedTable <FieldDefinition, FieldRvaRow>(TableIndex.FieldRva); var row = new FieldRvaRow( new SegmentReference(field.FieldRva), ownerToken.Rid); table.Add(field, row); }