Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
MetadataReaderExtensions.cs
Go to the documentation of this file.
3
5
6public static class MetadataReaderExtensions
7{
8 public static int GetTableRowCount(this MetadataReader reader, TableIndex tableIndex)
9 {
10 if (reader == null)
11 {
12 Throw.ArgumentNull("reader");
13 }
15 {
17 }
18 return reader.TableRowCounts[(uint)tableIndex];
19 }
20
21 public static int GetTableRowSize(this MetadataReader reader, TableIndex tableIndex)
22 {
23 if (reader == null)
24 {
25 throw new ArgumentNullException("reader");
26 }
27 return tableIndex switch
28 {
29 TableIndex.Module => reader.ModuleTable.RowSize,
30 TableIndex.TypeRef => reader.TypeRefTable.RowSize,
31 TableIndex.TypeDef => reader.TypeDefTable.RowSize,
32 TableIndex.FieldPtr => reader.FieldPtrTable.RowSize,
33 TableIndex.Field => reader.FieldTable.RowSize,
34 TableIndex.MethodPtr => reader.MethodPtrTable.RowSize,
35 TableIndex.MethodDef => reader.MethodDefTable.RowSize,
36 TableIndex.ParamPtr => reader.ParamPtrTable.RowSize,
37 TableIndex.Param => reader.ParamTable.RowSize,
38 TableIndex.InterfaceImpl => reader.InterfaceImplTable.RowSize,
39 TableIndex.MemberRef => reader.MemberRefTable.RowSize,
40 TableIndex.Constant => reader.ConstantTable.RowSize,
41 TableIndex.CustomAttribute => reader.CustomAttributeTable.RowSize,
42 TableIndex.FieldMarshal => reader.FieldMarshalTable.RowSize,
43 TableIndex.DeclSecurity => reader.DeclSecurityTable.RowSize,
44 TableIndex.ClassLayout => reader.ClassLayoutTable.RowSize,
45 TableIndex.FieldLayout => reader.FieldLayoutTable.RowSize,
46 TableIndex.StandAloneSig => reader.StandAloneSigTable.RowSize,
47 TableIndex.EventMap => reader.EventMapTable.RowSize,
48 TableIndex.EventPtr => reader.EventPtrTable.RowSize,
49 TableIndex.Event => reader.EventTable.RowSize,
50 TableIndex.PropertyMap => reader.PropertyMapTable.RowSize,
51 TableIndex.PropertyPtr => reader.PropertyPtrTable.RowSize,
52 TableIndex.Property => reader.PropertyTable.RowSize,
53 TableIndex.MethodSemantics => reader.MethodSemanticsTable.RowSize,
54 TableIndex.MethodImpl => reader.MethodImplTable.RowSize,
55 TableIndex.ModuleRef => reader.ModuleRefTable.RowSize,
56 TableIndex.TypeSpec => reader.TypeSpecTable.RowSize,
57 TableIndex.ImplMap => reader.ImplMapTable.RowSize,
58 TableIndex.FieldRva => reader.FieldRvaTable.RowSize,
59 TableIndex.EncLog => reader.EncLogTable.RowSize,
60 TableIndex.EncMap => reader.EncMapTable.RowSize,
61 TableIndex.Assembly => reader.AssemblyTable.RowSize,
62 TableIndex.AssemblyProcessor => reader.AssemblyProcessorTable.RowSize,
63 TableIndex.AssemblyOS => reader.AssemblyOSTable.RowSize,
64 TableIndex.AssemblyRef => reader.AssemblyRefTable.RowSize,
65 TableIndex.AssemblyRefProcessor => reader.AssemblyRefProcessorTable.RowSize,
66 TableIndex.AssemblyRefOS => reader.AssemblyRefOSTable.RowSize,
67 TableIndex.File => reader.FileTable.RowSize,
68 TableIndex.ExportedType => reader.ExportedTypeTable.RowSize,
69 TableIndex.ManifestResource => reader.ManifestResourceTable.RowSize,
70 TableIndex.NestedClass => reader.NestedClassTable.RowSize,
71 TableIndex.GenericParam => reader.GenericParamTable.RowSize,
72 TableIndex.MethodSpec => reader.MethodSpecTable.RowSize,
73 TableIndex.GenericParamConstraint => reader.GenericParamConstraintTable.RowSize,
74 TableIndex.Document => reader.DocumentTable.RowSize,
75 TableIndex.MethodDebugInformation => reader.MethodDebugInformationTable.RowSize,
76 TableIndex.LocalScope => reader.LocalScopeTable.RowSize,
77 TableIndex.LocalVariable => reader.LocalVariableTable.RowSize,
78 TableIndex.LocalConstant => reader.LocalConstantTable.RowSize,
79 TableIndex.ImportScope => reader.ImportScopeTable.RowSize,
80 TableIndex.StateMachineMethod => reader.StateMachineMethodTable.RowSize,
81 TableIndex.CustomDebugInformation => reader.CustomDebugInformationTable.RowSize,
82 _ => throw new ArgumentOutOfRangeException("tableIndex"),
83 };
84 }
85
86 public unsafe static int GetTableMetadataOffset(this MetadataReader reader, TableIndex tableIndex)
87 {
88 if (reader == null)
89 {
90 Throw.ArgumentNull("reader");
91 }
92 return (int)(reader.GetTableMetadataBlock(tableIndex).Pointer - reader.Block.Pointer);
93 }
94
96 {
97 return tableIndex switch
98 {
99 TableIndex.Module => reader.ModuleTable.Block,
100 TableIndex.TypeRef => reader.TypeRefTable.Block,
101 TableIndex.TypeDef => reader.TypeDefTable.Block,
102 TableIndex.FieldPtr => reader.FieldPtrTable.Block,
103 TableIndex.Field => reader.FieldTable.Block,
104 TableIndex.MethodPtr => reader.MethodPtrTable.Block,
105 TableIndex.MethodDef => reader.MethodDefTable.Block,
106 TableIndex.ParamPtr => reader.ParamPtrTable.Block,
107 TableIndex.Param => reader.ParamTable.Block,
108 TableIndex.InterfaceImpl => reader.InterfaceImplTable.Block,
109 TableIndex.MemberRef => reader.MemberRefTable.Block,
110 TableIndex.Constant => reader.ConstantTable.Block,
111 TableIndex.CustomAttribute => reader.CustomAttributeTable.Block,
112 TableIndex.FieldMarshal => reader.FieldMarshalTable.Block,
113 TableIndex.DeclSecurity => reader.DeclSecurityTable.Block,
114 TableIndex.ClassLayout => reader.ClassLayoutTable.Block,
115 TableIndex.FieldLayout => reader.FieldLayoutTable.Block,
116 TableIndex.StandAloneSig => reader.StandAloneSigTable.Block,
117 TableIndex.EventMap => reader.EventMapTable.Block,
118 TableIndex.EventPtr => reader.EventPtrTable.Block,
119 TableIndex.Event => reader.EventTable.Block,
120 TableIndex.PropertyMap => reader.PropertyMapTable.Block,
121 TableIndex.PropertyPtr => reader.PropertyPtrTable.Block,
122 TableIndex.Property => reader.PropertyTable.Block,
123 TableIndex.MethodSemantics => reader.MethodSemanticsTable.Block,
124 TableIndex.MethodImpl => reader.MethodImplTable.Block,
125 TableIndex.ModuleRef => reader.ModuleRefTable.Block,
126 TableIndex.TypeSpec => reader.TypeSpecTable.Block,
127 TableIndex.ImplMap => reader.ImplMapTable.Block,
128 TableIndex.FieldRva => reader.FieldRvaTable.Block,
129 TableIndex.EncLog => reader.EncLogTable.Block,
130 TableIndex.EncMap => reader.EncMapTable.Block,
131 TableIndex.Assembly => reader.AssemblyTable.Block,
132 TableIndex.AssemblyProcessor => reader.AssemblyProcessorTable.Block,
133 TableIndex.AssemblyOS => reader.AssemblyOSTable.Block,
134 TableIndex.AssemblyRef => reader.AssemblyRefTable.Block,
135 TableIndex.AssemblyRefProcessor => reader.AssemblyRefProcessorTable.Block,
136 TableIndex.AssemblyRefOS => reader.AssemblyRefOSTable.Block,
137 TableIndex.File => reader.FileTable.Block,
138 TableIndex.ExportedType => reader.ExportedTypeTable.Block,
139 TableIndex.ManifestResource => reader.ManifestResourceTable.Block,
140 TableIndex.NestedClass => reader.NestedClassTable.Block,
141 TableIndex.GenericParam => reader.GenericParamTable.Block,
142 TableIndex.MethodSpec => reader.MethodSpecTable.Block,
143 TableIndex.GenericParamConstraint => reader.GenericParamConstraintTable.Block,
144 TableIndex.Document => reader.DocumentTable.Block,
145 TableIndex.MethodDebugInformation => reader.MethodDebugInformationTable.Block,
146 TableIndex.LocalScope => reader.LocalScopeTable.Block,
147 TableIndex.LocalVariable => reader.LocalVariableTable.Block,
148 TableIndex.LocalConstant => reader.LocalConstantTable.Block,
149 TableIndex.ImportScope => reader.ImportScopeTable.Block,
150 TableIndex.StateMachineMethod => reader.StateMachineMethodTable.Block,
151 TableIndex.CustomDebugInformation => reader.CustomDebugInformationTable.Block,
152 _ => throw new ArgumentOutOfRangeException("tableIndex"),
153 };
154 }
155
156 public static int GetHeapSize(this MetadataReader reader, HeapIndex heapIndex)
157 {
158 if (reader == null)
159 {
160 Throw.ArgumentNull("reader");
161 }
162 return reader.GetMetadataBlock(heapIndex).Length;
163 }
164
165 public unsafe static int GetHeapMetadataOffset(this MetadataReader reader, HeapIndex heapIndex)
166 {
167 if (reader == null)
168 {
169 Throw.ArgumentNull("reader");
170 }
171 return (int)(reader.GetMetadataBlock(heapIndex).Pointer - reader.Block.Pointer);
172 }
173
175 {
176 return heapIndex switch
177 {
178 HeapIndex.UserString => reader.UserStringHeap.Block,
179 HeapIndex.String => reader.StringHeap.Block,
180 HeapIndex.Blob => reader.BlobHeap.Block,
181 HeapIndex.Guid => reader.GuidHeap.Block,
182 _ => throw new ArgumentOutOfRangeException("heapIndex"),
183 };
184 }
185
187 {
188 if (reader == null)
189 {
190 Throw.ArgumentNull("reader");
191 }
192 return reader.UserStringHeap.GetNextHandle(handle);
193 }
194
196 {
197 if (reader == null)
198 {
199 Throw.ArgumentNull("reader");
200 }
201 return reader.BlobHeap.GetNextHandle(handle);
202 }
203
205 {
206 if (reader == null)
207 {
208 Throw.ArgumentNull("reader");
209 }
210 return reader.StringHeap.GetNextHandle(handle);
211 }
212
214 {
215 if (reader == null)
216 {
217 throw new ArgumentNullException("reader");
218 }
219 for (int rid = 1; rid <= reader.EncLogTable.NumberOfRows; rid++)
220 {
221 yield return new EditAndContinueLogEntry(new EntityHandle(reader.EncLogTable.GetToken(rid)), reader.EncLogTable.GetFuncCode(rid));
222 }
223 }
224
226 {
227 if (reader == null)
228 {
229 throw new ArgumentNullException("reader");
230 }
231 for (int rid = 1; rid <= reader.EncMapTable.NumberOfRows; rid++)
232 {
233 yield return new EntityHandle(reader.EncMapTable.GetToken(rid));
234 }
235 }
236
238 {
239 if (reader == null)
240 {
241 throw new ArgumentNullException("reader");
242 }
243 for (int rid = 1; rid <= reader.PropertyMapTable.NumberOfRows; rid++)
244 {
245 yield return reader.PropertyMapTable.GetParentType(rid);
246 }
247 }
248
250 {
251 if (reader == null)
252 {
253 throw new ArgumentNullException("reader");
254 }
255 for (int rid = 1; rid <= reader.EventMapTable.NumberOfRows; rid++)
256 {
257 yield return reader.EventMapTable.GetParentType(rid);
258 }
259 }
260
262 {
263 if (reader == null)
264 {
265 throw new ArgumentNullException("reader");
266 }
268 switch (signatureTypeKind)
269 {
270 case SignatureTypeKind.Unknown:
271 return SignatureTypeKind.Unknown;
272 default:
273 throw new ArgumentOutOfRangeException("rawTypeKind");
274 case SignatureTypeKind.ValueType:
275 case SignatureTypeKind.Class:
276 switch (typeHandle.Kind)
277 {
278 case HandleKind.TypeDefinition:
279 return signatureTypeKind;
280 case HandleKind.TypeReference:
281 {
283 return signatureTreatment switch
284 {
285 TypeRefSignatureTreatment.ProjectedToClass => SignatureTypeKind.Class,
286 TypeRefSignatureTreatment.ProjectedToValueType => SignatureTypeKind.ValueType,
287 TypeRefSignatureTreatment.None => signatureTypeKind,
289 };
290 }
291 case HandleKind.TypeSpecification:
292 return SignatureTypeKind.Unknown;
293 default:
295 }
296 }
297 }
298}
static Exception UnexpectedValue(object value)
static SignatureTypeKind ResolveSignatureTypeKind(this MetadataReader reader, EntityHandle typeHandle, byte rawTypeKind)
static IEnumerable< EntityHandle > GetEditAndContinueMapEntries(this MetadataReader reader)
static StringHandle GetNextHandle(this MetadataReader reader, StringHandle handle)
static unsafe int GetTableMetadataOffset(this MetadataReader reader, TableIndex tableIndex)
static MemoryBlock GetMetadataBlock(this MetadataReader reader, HeapIndex heapIndex)
static unsafe int GetHeapMetadataOffset(this MetadataReader reader, HeapIndex heapIndex)
static UserStringHandle GetNextHandle(this MetadataReader reader, UserStringHandle handle)
static MemoryBlock GetTableMetadataBlock(this MetadataReader reader, TableIndex tableIndex)
static IEnumerable< EditAndContinueLogEntry > GetEditAndContinueLogEntries(this MetadataReader reader)
static int GetTableRowCount(this MetadataReader reader, TableIndex tableIndex)
static IEnumerable< TypeDefinitionHandle > GetTypesWithProperties(this MetadataReader reader)
static BlobHandle GetNextHandle(this MetadataReader reader, BlobHandle handle)
static IEnumerable< TypeDefinitionHandle > GetTypesWithEvents(this MetadataReader reader)
static int GetHeapSize(this MetadataReader reader, HeapIndex heapIndex)
static int GetTableRowSize(this MetadataReader reader, TableIndex tableIndex)
CustomDebugInformationTableReader CustomDebugInformationTable
MethodSemanticsTableReader MethodSemanticsTable
CustomAttributeTableReader CustomAttributeTable
AssemblyRefOSTableReader AssemblyRefOSTable
InterfaceImplTableReader InterfaceImplTable
LocalConstantTableReader LocalConstantTable
MethodDebugInformationTableReader MethodDebugInformationTable
GenericParamConstraintTableReader GenericParamConstraintTable
LocalVariableTableReader LocalVariableTable
AssemblyRefProcessorTableReader AssemblyRefProcessorTable
ManifestResourceTableReader ManifestResourceTable
StandAloneSigTableReader StandAloneSigTable
StateMachineMethodTableReader StateMachineMethodTable
AssemblyProcessorTableReader AssemblyProcessorTable
TypeReference GetTypeReference(TypeReferenceHandle handle)
static void ArgumentNull(string parameterName)
Definition Throw.cs:110
static void TableIndexOutOfRange()
Definition Throw.cs:173
static string Format(string resourceFormat, object p1)
Definition SR.cs:118
static string UnexpectedHandleKind
Definition SR.cs:20
Definition SR.cs:7
TypeRefSignatureTreatment SignatureTreatment