Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
MethodImplTableReader.cs
Go to the documentation of this file.
2
4
5internal readonly struct MethodImplTableReader
6{
7 internal readonly int NumberOfRows;
8
9 private readonly bool _IsTypeDefTableRowRefSizeSmall;
10
11 private readonly bool _IsMethodDefOrRefRefSizeSmall;
12
13 private readonly int _ClassOffset;
14
15 private readonly int _MethodBodyOffset;
16
17 private readonly int _MethodDeclarationOffset;
18
19 internal readonly int RowSize;
20
21 internal readonly MemoryBlock Block;
22
23 internal MethodImplTableReader(int numberOfRows, bool declaredSorted, int typeDefTableRowRefSize, int methodDefOrRefRefSize, MemoryBlock containingBlock, int containingBlockOffset)
24 {
25 NumberOfRows = numberOfRows;
26 _IsTypeDefTableRowRefSizeSmall = typeDefTableRowRefSize == 2;
27 _IsMethodDefOrRefRefSizeSmall = methodDefOrRefRefSize == 2;
28 _ClassOffset = 0;
29 _MethodBodyOffset = _ClassOffset + typeDefTableRowRefSize;
30 _MethodDeclarationOffset = _MethodBodyOffset + methodDefOrRefRefSize;
31 RowSize = _MethodDeclarationOffset + methodDefOrRefRefSize;
32 Block = containingBlock.GetMemoryBlockAt(containingBlockOffset, RowSize * numberOfRows);
33 if (!declaredSorted && !CheckSorted())
34 {
36 }
37 }
38
44
50
56
57 internal void GetMethodImplRange(TypeDefinitionHandle typeDef, out int firstImplRowId, out int lastImplRowId)
58 {
59 Block.BinarySearchReferenceRange(NumberOfRows, RowSize, _ClassOffset, (uint)typeDef.RowId, _IsTypeDefTableRowRefSizeSmall, out var startRowNumber, out var endRowNumber);
60 if (startRowNumber == -1)
61 {
62 firstImplRowId = 1;
63 lastImplRowId = 0;
64 }
65 else
66 {
67 firstImplRowId = startRowNumber + 1;
68 lastImplRowId = endRowNumber + 1;
69 }
70 }
71
76}
static EntityHandle ConvertToHandle(uint methodDefOrRef)
static void TableNotSorted(TableIndex tableIndex)
Definition Throw.cs:250
int PeekReference(int offset, bool smallRefSize)
unsafe MemoryBlock GetMemoryBlockAt(int offset, int length)
bool IsOrderedByReferenceAscending(int rowSize, int referenceOffset, bool isReferenceSmall)
void BinarySearchReferenceRange(int rowCount, int rowSize, int referenceOffset, uint referenceValue, bool isReferenceSmall, out int startRowNumber, out int endRowNumber)
uint PeekTaggedReference(int offset, bool smallRefSize)
MethodImplTableReader(int numberOfRows, bool declaredSorted, int typeDefTableRowRefSize, int methodDefOrRefRefSize, MemoryBlock containingBlock, int containingBlockOffset)
TypeDefinitionHandle GetClass(MethodImplementationHandle handle)
EntityHandle GetMethodDeclaration(MethodImplementationHandle handle)
void GetMethodImplRange(TypeDefinitionHandle typeDef, out int firstImplRowId, out int lastImplRowId)
EntityHandle GetMethodBody(MethodImplementationHandle handle)
static TypeDefinitionHandle FromRowId(int rowId)