Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
TypeDefTableReader.cs
Go to the documentation of this file.
2
4
5internal struct TypeDefTableReader
6{
7 internal readonly int NumberOfRows;
8
9 private readonly bool _IsFieldRefSizeSmall;
10
11 private readonly bool _IsMethodRefSizeSmall;
12
13 private readonly bool _IsTypeDefOrRefRefSizeSmall;
14
15 private readonly bool _IsStringHeapRefSizeSmall;
16
17 private readonly int _FlagsOffset;
18
19 private readonly int _NameOffset;
20
21 private readonly int _NamespaceOffset;
22
23 private readonly int _ExtendsOffset;
24
25 private readonly int _FieldListOffset;
26
27 private readonly int _MethodListOffset;
28
29 internal readonly int RowSize;
30
32
33 internal TypeDefTableReader(int numberOfRows, int fieldRefSize, int methodRefSize, int typeDefOrRefRefSize, int stringHeapRefSize, MemoryBlock containingBlock, int containingBlockOffset)
34 {
35 NumberOfRows = numberOfRows;
36 _IsFieldRefSizeSmall = fieldRefSize == 2;
37 _IsMethodRefSizeSmall = methodRefSize == 2;
38 _IsTypeDefOrRefRefSizeSmall = typeDefOrRefRefSize == 2;
39 _IsStringHeapRefSizeSmall = stringHeapRefSize == 2;
40 _FlagsOffset = 0;
42 _NamespaceOffset = _NameOffset + stringHeapRefSize;
43 _ExtendsOffset = _NamespaceOffset + stringHeapRefSize;
44 _FieldListOffset = _ExtendsOffset + typeDefOrRefRefSize;
45 _MethodListOffset = _FieldListOffset + fieldRefSize;
46 RowSize = _MethodListOffset + methodRefSize;
47 Block = containingBlock.GetMemoryBlockAt(containingBlockOffset, RowSize * numberOfRows);
48 }
49
51 {
52 int num = (handle.RowId - 1) * RowSize;
54 }
55
61
67
73
79
80 internal int GetFieldStart(int rowId)
81 {
82 int num = (rowId - 1) * RowSize;
84 }
85
86 internal int GetMethodStart(int rowId)
87 {
88 int num = (rowId - 1) * RowSize;
90 }
91
92 internal TypeDefinitionHandle FindTypeContainingMethod(int methodDefOrPtrRowId, int numberOfMethods)
93 {
94 int numberOfRows = NumberOfRows;
95 int num = Block.BinarySearchForSlot(numberOfRows, RowSize, _MethodListOffset, (uint)methodDefOrPtrRowId, _IsMethodRefSizeSmall);
96 int num2 = num + 1;
97 if (num2 == 0)
98 {
99 return default(TypeDefinitionHandle);
100 }
101 if (num2 > numberOfRows)
102 {
103 if (methodDefOrPtrRowId <= numberOfMethods)
104 {
105 return TypeDefinitionHandle.FromRowId(numberOfRows);
106 }
107 return default(TypeDefinitionHandle);
108 }
109 int methodStart = GetMethodStart(num2);
110 if (methodStart == methodDefOrPtrRowId)
111 {
112 while (num2 < numberOfRows)
113 {
114 int num3 = num2 + 1;
115 methodStart = GetMethodStart(num3);
116 if (methodStart != methodDefOrPtrRowId)
117 {
118 break;
119 }
120 num2 = num3;
121 }
122 }
123 return TypeDefinitionHandle.FromRowId(num2);
124 }
125
126 internal TypeDefinitionHandle FindTypeContainingField(int fieldDefOrPtrRowId, int numberOfFields)
127 {
128 int numberOfRows = NumberOfRows;
129 int num = Block.BinarySearchForSlot(numberOfRows, RowSize, _FieldListOffset, (uint)fieldDefOrPtrRowId, _IsFieldRefSizeSmall);
130 int num2 = num + 1;
131 if (num2 == 0)
132 {
133 return default(TypeDefinitionHandle);
134 }
135 if (num2 > numberOfRows)
136 {
137 if (fieldDefOrPtrRowId <= numberOfFields)
138 {
139 return TypeDefinitionHandle.FromRowId(numberOfRows);
140 }
141 return default(TypeDefinitionHandle);
142 }
143 int fieldStart = GetFieldStart(num2);
144 if (fieldStart == fieldDefOrPtrRowId)
145 {
146 while (num2 < numberOfRows)
147 {
148 int num3 = num2 + 1;
149 fieldStart = GetFieldStart(num3);
150 if (fieldStart != fieldDefOrPtrRowId)
151 {
152 break;
153 }
154 num2 = num3;
155 }
156 }
157 return TypeDefinitionHandle.FromRowId(num2);
158 }
159}
static EntityHandle ConvertToHandle(uint typeDefOrRefTag)
int PeekReference(int offset, bool smallRefSize)
unsafe MemoryBlock GetMemoryBlockAt(int offset, int length)
int PeekHeapReference(int offset, bool smallRefSize)
int BinarySearchForSlot(int rowCount, int rowSize, int referenceListOffset, uint referenceValue, bool isReferenceSmall)
unsafe uint PeekUInt32(int offset)
uint PeekTaggedReference(int offset, bool smallRefSize)
EntityHandle GetExtends(TypeDefinitionHandle handle)
TypeDefTableReader(int numberOfRows, int fieldRefSize, int methodRefSize, int typeDefOrRefRefSize, int stringHeapRefSize, MemoryBlock containingBlock, int containingBlockOffset)
TypeDefinitionHandle FindTypeContainingMethod(int methodDefOrPtrRowId, int numberOfMethods)
StringHandle GetNamespace(TypeDefinitionHandle handle)
StringHandle GetName(TypeDefinitionHandle handle)
TypeAttributes GetFlags(TypeDefinitionHandle handle)
NamespaceDefinitionHandle GetNamespaceDefinition(TypeDefinitionHandle handle)
TypeDefinitionHandle FindTypeContainingField(int fieldDefOrPtrRowId, int numberOfFields)
static NamespaceDefinitionHandle FromFullNameOffset(int stringHeapOffset)
static StringHandle FromOffset(int heapOffset)
static TypeDefinitionHandle FromRowId(int rowId)