コード例 #1
0
        /// <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.");
        }
コード例 #2
0
        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);
        }