private void WriteTables(MetadataTableStream tables) { string tableName = tables.IsOptimized ? MetadataConstants.StreamTable : MetadataConstants.StreamTableUnoptimized; WriteStreamHeader(tableName, _state.TablesLength); var compressionInfo = _compressionInfo; // Header _blob.Write(ref _state.StreamPos, (int)0); // Reserved, 4 bytes _blob.Write(ref _state.StreamPos, (byte)tables.SchemaMajorVersion); _blob.Write(ref _state.StreamPos, (byte)tables.SchemaMinorVersion); // Flags var heapFlags = HeapOffsetFlags.None; if (compressionInfo.StringHeapOffsetSize4) { heapFlags |= HeapOffsetFlags.StringHeap4; } if (compressionInfo.GuidHeapOffsetSize4) { heapFlags |= HeapOffsetFlags.GuidHeap4; } if (compressionInfo.BlobHeapOffsetSize4) { heapFlags |= HeapOffsetFlags.BlobHeap4; } _blob.Write(ref _state.StreamPos, (byte)heapFlags); _blob.Write(ref _state.StreamPos, (byte)1); // Reserved, 1 bytes // Mask _blob.Write(ref _state.StreamPos, (ulong)GetMaskValid(tables)); _blob.Write(ref _state.StreamPos, (ulong)GetMaskSorted(tables)); // Row counts for (int i = 0; i < MetadataConstants.TableCount; i++) { int count = tables[i].Count; if (count > 0) { _blob.Write(ref _state.StreamPos, (int)count); } } // Tables for (int i = 0; i < MetadataConstants.TableCount; i++) { var table = tables[i]; if (table.Count > 0) { _tableOffsets[(int)table.Type] = _state.StreamPos; table.Write(_blob, ref _state.StreamPos, compressionInfo); } } }
public MetadataScope() { _frameworkVersionMoniker = MicrosoftNetFramework.VersionMonikerLatest; _tables = new MetadataTableStream(this); _strings = new MetadataStringStream(); _userStrings = new MetadataUserStringStream(); _guids = new MetadataGuidStream(); _blobs = new MetadataBlobStream(); }
private ulong GetMaskValid(MetadataTableStream tables) { ulong mask = 0; for (int i = 0; i < MetadataConstants.TableCount; i++) { var table = tables[i]; if (table.Count > 0) { mask |= 1UL << i; } } return(mask); }
internal PropertyPtrTable(MetadataTableStream stream) : base(MetadataTableType.PropertyPtr, stream) { }
internal FileTable(MetadataTableStream stream) : base(MetadataTableType.File, stream) { }
internal FieldPtrTable(MetadataTableStream stream) : base(MetadataTableType.FieldPtr, stream) { }
internal ModuleRefTable(MetadataTableStream stream) : base(MetadataTableType.ModuleRef, stream) { }
internal AssemblyOSTable(MetadataTableStream stream) : base(MetadataTableType.AssemblyOS, stream) { }
internal FieldRVATable(MetadataTableStream stream) : base(MetadataTableType.FieldRVA, stream) { }
internal ParamPtrTable(MetadataTableStream stream) : base(MetadataTableType.ParamPtr, stream) { }
private ulong GetMaskSorted(MetadataTableStream tables) { return(tables.SortMask); }
internal FieldMarshalTable(MetadataTableStream stream) : base(MetadataTableType.FieldMarshal, stream) { }
internal DeclSecurityTable(MetadataTableStream stream) : base(MetadataTableType.DeclSecurity, stream) { }
internal MethodImplTable(MetadataTableStream stream) : base(MetadataTableType.MethodImpl, stream) { }
internal ENCLogTable(MetadataTableStream stream) : base(MetadataTableType.ENCLog, stream) { }
internal StandAloneSigTable(MetadataTableStream stream) : base(MetadataTableType.StandAloneSig, stream) { }
internal TypeRefTable(MetadataTableStream stream) : base(MetadataTableType.TypeRef, stream) { }
internal MethodSpecTable(MetadataTableStream stream) : base(MetadataTableType.MethodSpec, stream) { }
internal MetadataPtrTable(int type, MetadataTableStream stream) : base(type, stream) { _rows = new int[DefaultCapacity]; }
internal MetadataTable(int type, MetadataTableStream stream) : base(type, stream) { }
internal EventMapTable(MetadataTableStream stream) : base(MetadataTableType.EventMap, stream) { }
internal GenericParamConstraintTable(MetadataTableStream stream) : base(MetadataTableType.GenericParamConstraint, stream) { }
internal AssemblyProcessorTable(MetadataTableStream stream) : base(MetadataTableType.AssemblyProcessor, stream) { }
internal ExportedTypeTable(MetadataTableStream stream) : base(MetadataTableType.ExportedType, stream) { }
internal TypeSpecTable(MetadataTableStream stream) : base(MetadataTableType.TypeSpec, stream) { }
internal MethodPtrTable(MetadataTableStream stream) : base(MetadataTableType.MethodPtr, stream) { }
internal MethodTable(MetadataTableStream stream) : base(MetadataTableType.MethodDef, stream) { }
internal MemberRefTable(MetadataTableStream stream) : base(MetadataTableType.MemberRef, stream) { }
internal PropertyMapTable(MetadataTableStream stream) : base(MetadataTableType.PropertyMap, stream) { }
internal ManifestResourceTable(MetadataTableStream stream) : base(MetadataTableType.ManifestResource, stream) { }