protected internal override void Read(IBinaryAccessor accessor, TableCompressionInfo compressionInfo, int count) { if (count == 0) { return; } var rows = new TypeDefRow[count]; for (int i = 0; i < count; i++) { var row = new TypeDefRow(); row.Flags = (int)accessor.ReadUInt32(); row.Name = accessor.ReadCell(compressionInfo.StringHeapOffsetSize4); row.Namespace = accessor.ReadCell(compressionInfo.StringHeapOffsetSize4); row.Extends = accessor.ReadCell(compressionInfo.CodedTokenDataSize4[0]); row.FieldList = accessor.ReadCell(compressionInfo.TableRowIndexSize4[MetadataTableType.Field]); row.MethodList = accessor.ReadCell(compressionInfo.TableRowIndexSize4[MetadataTableType.MethodDef]); rows[i] = row; } _count = count; _rows = rows; }
protected internal override void Read(IBinaryAccessor accessor, TableCompressionInfo compressionInfo, int count) { if (count == 0) { return; } var rows = new AssemblyRow[count]; for (int i = 0; i < count; i++) { var row = new AssemblyRow(); row.HashAlgId = (HashAlgorithm)accessor.ReadUInt32(); row.MajorVersion = (int)accessor.ReadUInt16(); row.MinorVersion = (int)accessor.ReadUInt16(); row.BuildNumber = (int)accessor.ReadUInt16(); row.RevisionNumber = (int)accessor.ReadUInt16(); row.Flags = (int)accessor.ReadUInt32(); row.PublicKey = accessor.ReadCell(compressionInfo.BlobHeapOffsetSize4); row.Name = accessor.ReadCell(compressionInfo.StringHeapOffsetSize4); row.Locale = accessor.ReadCell(compressionInfo.StringHeapOffsetSize4); rows[i] = row; } _count = count; _rows = rows; }
protected internal override void Write(Blob blob, ref int pos, TableCompressionInfo compressionInfo) { for (int i = 0; i < _count; i++) { blob.WriteCell(ref pos, compressionInfo.TableRowIndexSize4[MetadataTableType.Field], _rows[i]); } }
protected internal override void Read(IBinaryAccessor accessor, TableCompressionInfo compressionInfo, int count) { if (count == 0) { return; } var rows = new MethodRow[count]; for (int i = 0; i < count; i++) { var row = new MethodRow(); row.RVA = accessor.ReadUInt32(); row.ImplFlags = accessor.ReadUInt16(); row.Flags = accessor.ReadUInt16(); row.Name = accessor.ReadCell(compressionInfo.StringHeapOffsetSize4); row.Signature = accessor.ReadCell(compressionInfo.BlobHeapOffsetSize4); row.ParamList = accessor.ReadCell(compressionInfo.TableRowIndexSize4[MetadataTableType.Param]); rows[i] = row; } _count = count; _rows = rows; }
internal void Read(IBinaryAccessor accessor) { // Reserved, 4 bytes accessor.ReadInt32(); _schemaMajorVersion = accessor.ReadByte(); _schemaMinorVersion = accessor.ReadByte(); byte heapFlags = accessor.ReadByte(); // Reserved, 1 bytes accessor.ReadByte(); ulong validMask = accessor.ReadUInt64(); _sortMask = accessor.ReadUInt64(); // Row counts int[] rowCounts = new int[MetadataConstants.TableCount]; for (int tableType = 0; tableType < MetadataConstants.TableCount; tableType++) { if ((validMask & (1UL << tableType)) != 0) { rowCounts[tableType] = accessor.ReadInt32(); } } var compressionInfo = TableCompressionInfo.Create(_metadata, rowCounts, heapFlags); // Tables for (int tableType = 0; tableType < MetadataConstants.TableCount; tableType++) { _tables[tableType].Read(accessor, compressionInfo, rowCounts[tableType]); } }
private static void LoadTableIndexSizes(TableCompressionInfo info, MetadataScope metadata, int[] rowCounts) { for (int i = 0; i < MetadataConstants.TableCount; i++) { info.TableRowIndexSize4[i] = (rowCounts[i] >= (1 << 16)); } }
protected internal override void Write(Blob blob, ref int pos, TableCompressionInfo compressionInfo) { for (int i = 0; i < _count; i++) { var row = _rows[i]; blob.Write(ref pos, (uint)row.Processor); } }
protected internal override void Write(Blob blob, ref int pos, TableCompressionInfo compressionInfo) { for (int i = 0; i < _count; i++) { var row = _rows[i]; blob.WriteCell(ref pos, compressionInfo.BlobHeapOffsetSize4, (int)row.Signature); } }
protected internal override void Write(Blob blob, ref int pos, TableCompressionInfo compressionInfo) { for (int i = 0; i < _count; i++) { var row = _rows[i]; blob.Write(ref pos, (uint)row.Processor); blob.WriteCell(ref pos, compressionInfo.TableRowIndexSize4[MetadataTableType.AssemblyRef], (int)row.AssemblyRef); } }
protected internal override void Write(Blob blob, ref int pos, TableCompressionInfo compressionInfo) { for (int i = 0; i < _count; i++) { var row = _rows[i]; blob.WriteCell(ref pos, compressionInfo.TableRowIndexSize4[MetadataTableType.TypeDef], (int)row.NestedClass); blob.WriteCell(ref pos, compressionInfo.TableRowIndexSize4[MetadataTableType.TypeDef], (int)row.EnclosingClass); } }
protected internal override void Write(Blob blob, ref int pos, TableCompressionInfo compressionInfo) { for (int i = 0; i < _count; i++) { var row = _rows[i]; blob.WriteCell(ref pos, compressionInfo.TableRowIndexSize4[MetadataTableType.GenericParam], (int)row.Owner); blob.WriteCell(ref pos, compressionInfo.CodedTokenDataSize4[0], (int)row.Constraint); } }
protected internal override void Write(Blob blob, ref int pos, TableCompressionInfo compressionInfo) { for (int i = 0; i < _count; i++) { var row = _rows[i]; blob.WriteCell(ref pos, compressionInfo.TableRowIndexSize4[MetadataTableType.TypeDef], (int)row.Parent); blob.WriteCell(ref pos, compressionInfo.TableRowIndexSize4[MetadataTableType.Property], (int)row.PropertyList); } }
protected internal override void Write(Blob blob, ref int pos, TableCompressionInfo compressionInfo) { for (int i = 0; i < _count; i++) { var row = _rows[i]; blob.WriteCell(ref pos, compressionInfo.CodedTokenDataSize4[7], (int)row.Method); blob.WriteCell(ref pos, compressionInfo.BlobHeapOffsetSize4, (int)row.Instantiation); } }
protected internal override void Write(Blob blob, ref int pos, TableCompressionInfo compressionInfo) { for (int i = 0; i < _count; i++) { var row = _rows[i]; blob.WriteCell(ref pos, compressionInfo.TableRowIndexSize4[MetadataTableType.TypeDef], (int)row.Class); blob.WriteCell(ref pos, compressionInfo.CodedTokenDataSize4[0], (int)row.Interface); } }
protected internal override void Write(Blob blob, ref int pos, TableCompressionInfo compressionInfo) { for (int i = 0; i < _count; i++) { var row = _rows[i]; blob.Write(ref pos, (uint)row.OSPlatformId); blob.Write(ref pos, (uint)row.OSMajorVersion); blob.Write(ref pos, (uint)row.OSMinorVersion); } }
protected internal override void Write(Blob blob, ref int pos, TableCompressionInfo compressionInfo) { for (int i = 0; i < _count; i++) { var row = _rows[i]; blob.Write(ref pos, (uint)row.Flags); blob.WriteCell(ref pos, compressionInfo.StringHeapOffsetSize4, (int)row.Name); blob.WriteCell(ref pos, compressionInfo.BlobHeapOffsetSize4, (int)row.HashValue); } }
protected internal override void Write(Blob blob, ref int pos, TableCompressionInfo compressionInfo) { for (int i = 0; i < _count; i++) { var row = _rows[i]; blob.Write(ref pos, (short)row.Action); blob.WriteCell(ref pos, compressionInfo.CodedTokenDataSize4[4], (int)row.Parent); blob.WriteCell(ref pos, compressionInfo.BlobHeapOffsetSize4, (int)row.PermissionSet); } }
protected internal override void Write(Blob blob, ref int pos, TableCompressionInfo compressionInfo) { for (int i = 0; i < _count; i++) { var row = _rows[i]; blob.WriteCell(ref pos, compressionInfo.CodedTokenDataSize4[2], (int)row.Parent); blob.WriteCell(ref pos, compressionInfo.CodedTokenDataSize4[10], (int)row.Type); blob.WriteCell(ref pos, compressionInfo.BlobHeapOffsetSize4, (int)row.Value); } }
protected internal override void Write(Blob blob, ref int pos, TableCompressionInfo compressionInfo) { for (int i = 0; i < _count; i++) { var row = _rows[i]; blob.WriteCell(ref pos, compressionInfo.CodedTokenDataSize4[11], (int)row.ResolutionScope); blob.WriteCell(ref pos, compressionInfo.StringHeapOffsetSize4, (int)row.Name); blob.WriteCell(ref pos, compressionInfo.StringHeapOffsetSize4, (int)row.Namespace); } }
protected internal override void Write(Blob blob, ref int pos, TableCompressionInfo compressionInfo) { for (int i = 0; i < _count; i++) { var row = _rows[i]; blob.Write(ref pos, (ushort)row.Semantic); blob.WriteCell(ref pos, compressionInfo.TableRowIndexSize4[MetadataTableType.MethodDef], (int)row.Method); blob.WriteCell(ref pos, compressionInfo.CodedTokenDataSize4[6], (int)row.Association); } }
protected internal override void Write(Blob blob, ref int pos, TableCompressionInfo compressionInfo) { for (int i = 0; i < _count; i++) { var row = _rows[i]; blob.Write(ref pos, (ushort)row.Flags); blob.WriteCell(ref pos, compressionInfo.StringHeapOffsetSize4, (int)row.Name); blob.WriteCell(ref pos, compressionInfo.CodedTokenDataSize4[0], (int)row.EventType); } }
protected internal override void Write(Blob blob, ref int pos, TableCompressionInfo compressionInfo) { for (int i = 0; i < _count; i++) { var row = _rows[i]; blob.Write(ref pos, (ushort)row.MappingFlags); blob.WriteCell(ref pos, compressionInfo.CodedTokenDataSize4[8], (int)row.MemberForwarded); blob.WriteCell(ref pos, compressionInfo.StringHeapOffsetSize4, (int)row.ImportName); blob.WriteCell(ref pos, compressionInfo.TableRowIndexSize4[MetadataTableType.ModuleRef], (int)row.ImportScope); } }
protected internal override void Write(Blob blob, ref int pos, TableCompressionInfo compressionInfo) { for (int i = 0; i < _count; i++) { var row = _rows[i]; blob.Write(ref pos, (uint)row.Flags); blob.Write(ref pos, row.TypeDefId); blob.WriteCell(ref pos, compressionInfo.StringHeapOffsetSize4, (int)row.TypeName); blob.WriteCell(ref pos, compressionInfo.StringHeapOffsetSize4, (int)row.TypeNamespace); blob.WriteCell(ref pos, compressionInfo.CodedTokenDataSize4[9], (int)row.Implementation); } }
protected internal override void Write(Blob blob, ref int pos, TableCompressionInfo compressionInfo) { for (int i = 0; i < _count; i++) { var row = _rows[i]; blob.Write(ref pos, (ushort)row.Generation); blob.WriteCell(ref pos, compressionInfo.StringHeapOffsetSize4, (int)row.Name); blob.WriteCell(ref pos, compressionInfo.GuidHeapOffsetSize4, (int)row.Mvid); blob.WriteCell(ref pos, compressionInfo.GuidHeapOffsetSize4, (int)row.EncId); blob.WriteCell(ref pos, compressionInfo.GuidHeapOffsetSize4, (int)row.EncBaseId); } }
protected internal override void Write(Blob blob, ref int pos, TableCompressionInfo compressionInfo) { for (int i = 0; i < _count; i++) { var row = _rows[i]; blob.Write(ref pos, (uint)row.RVA); blob.Write(ref pos, (ushort)row.ImplFlags); blob.Write(ref pos, (ushort)row.Flags); blob.WriteCell(ref pos, compressionInfo.StringHeapOffsetSize4, (int)row.Name); blob.WriteCell(ref pos, compressionInfo.BlobHeapOffsetSize4, (int)row.Signature); blob.WriteCell(ref pos, compressionInfo.TableRowIndexSize4[MetadataTableType.Param], (int)row.ParamList); } }
private void DoBuild() { _compressionInfo = TableCompressionInfo.Create(_metadata); // Signature _state.StreamPos += 16; _state.StreamPos += Encoding.UTF8.GetByteCount((_metadata.FrameworkVersionMoniker ?? "")).Align(4); // Storage header _state.StreamPos += 4; // Tables { _state.TablesLength = GetTableStreamLength(); string tableName = _metadata.Tables.IsOptimized ? MetadataConstants.StreamTable : MetadataConstants.StreamTableUnoptimized; _state.StreamPos += 8 + (tableName.Length + 1).Align(4); _state.StreamCount++; } // Strings if (_metadata.Strings.Length > 0) { _state.StreamPos += 8 + (MetadataConstants.StreamStrings.Length + 1).Align(4); _state.StreamCount++; } if (_metadata.UserStrings.Length > 0) { _state.StreamPos += 8 + (MetadataConstants.StreamUserStrings.Length + 1).Align(4); _state.StreamCount++; } if (_metadata.Guids.Length > 0) { _state.StreamPos += 8 + (MetadataConstants.StreamGuid.Length + 1).Align(4); _state.StreamCount++; } if (_metadata.Blobs.Length > 0) { _state.StreamPos += 8 + (MetadataConstants.StreamBlob.Length + 1).Align(4); _state.StreamCount++; } foreach (var externalStream in _metadata.ExternalStreams) { _state.StreamPos += 8 + ((externalStream.Name ?? "").Length + 1).Align(4); _state.StreamCount++; } }
protected internal override void Write(Blob blob, ref int pos, TableCompressionInfo compressionInfo) { for (int i = 0; i < _count; i++) { var row = _rows[i]; blob.Write(ref pos, (uint)row.Flags); blob.WriteCell(ref pos, compressionInfo.StringHeapOffsetSize4, (int)row.Name); blob.WriteCell(ref pos, compressionInfo.StringHeapOffsetSize4, (int)row.Namespace); blob.WriteCell(ref pos, compressionInfo.CodedTokenDataSize4[0], (int)row.Extends); blob.WriteCell(ref pos, compressionInfo.TableRowIndexSize4[MetadataTableType.Field], (int)row.FieldList); blob.WriteCell(ref pos, compressionInfo.TableRowIndexSize4[MetadataTableType.MethodDef], (int)row.MethodList); } }
protected internal override void Read(IBinaryAccessor accessor, TableCompressionInfo compressionInfo, int count) { if (count == 0) { return; } var rows = new int[count]; for (int i = 0; i < count; i++) { rows[i] = accessor.ReadCell(compressionInfo.TableRowIndexSize4[MetadataTableType.Field]); } _count = count; _rows = rows; }
protected internal override void Write(Blob blob, ref int pos, TableCompressionInfo compressionInfo) { for (int i = 0; i < _count; i++) { var row = _rows[i]; blob.Write(ref pos, (uint)row.HashAlgId); blob.Write(ref pos, (ushort)row.MajorVersion); blob.Write(ref pos, (ushort)row.MinorVersion); blob.Write(ref pos, (ushort)row.BuildNumber); blob.Write(ref pos, (ushort)row.RevisionNumber); blob.Write(ref pos, (uint)row.Flags); blob.WriteCell(ref pos, compressionInfo.BlobHeapOffsetSize4, (int)row.PublicKey); blob.WriteCell(ref pos, compressionInfo.StringHeapOffsetSize4, (int)row.Name); blob.WriteCell(ref pos, compressionInfo.StringHeapOffsetSize4, (int)row.Locale); } }
protected internal override void Read(IBinaryAccessor accessor, TableCompressionInfo compressionInfo, int count) { if (count == 0) return; var rows = new DeclSecurityRow[count]; for (int i = 0; i < count; i++) { var row = new DeclSecurityRow(); row.Action = (SecurityAction)accessor.ReadInt16(); row.Parent = accessor.ReadCell(compressionInfo.CodedTokenDataSize4[4]); row.PermissionSet = accessor.ReadCell(compressionInfo.BlobHeapOffsetSize4); rows[i] = row; } _count = count; _rows = rows; }