Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
InterfaceImplTableReader.cs
Go to the documentation of this file.
2
4
5internal readonly struct InterfaceImplTableReader
6{
7 internal readonly int NumberOfRows;
8
9 private readonly bool _IsTypeDefTableRowRefSizeSmall;
10
11 private readonly bool _IsTypeDefOrRefRefSizeSmall;
12
13 private readonly int _ClassOffset;
14
15 private readonly int _InterfaceOffset;
16
17 internal readonly int RowSize;
18
19 internal readonly MemoryBlock Block;
20
21 internal InterfaceImplTableReader(int numberOfRows, bool declaredSorted, int typeDefTableRowRefSize, int typeDefOrRefRefSize, MemoryBlock containingBlock, int containingBlockOffset)
22 {
23 NumberOfRows = numberOfRows;
24 _IsTypeDefTableRowRefSizeSmall = typeDefTableRowRefSize == 2;
25 _IsTypeDefOrRefRefSizeSmall = typeDefOrRefRefSize == 2;
26 _ClassOffset = 0;
27 _InterfaceOffset = _ClassOffset + typeDefTableRowRefSize;
28 RowSize = _InterfaceOffset + typeDefOrRefRefSize;
29 Block = containingBlock.GetMemoryBlockAt(containingBlockOffset, RowSize * numberOfRows);
30 if (!declaredSorted && !CheckSorted())
31 {
32 Throw.TableNotSorted(TableIndex.InterfaceImpl);
33 }
34 }
35
40
41 internal void GetInterfaceImplRange(TypeDefinitionHandle typeDef, out int firstImplRowId, out int lastImplRowId)
42 {
43 int rowId = typeDef.RowId;
44 Block.BinarySearchReferenceRange(NumberOfRows, RowSize, _ClassOffset, (uint)rowId, _IsTypeDefTableRowRefSizeSmall, out var startRowNumber, out var endRowNumber);
45 if (startRowNumber == -1)
46 {
47 firstImplRowId = 1;
48 lastImplRowId = 0;
49 }
50 else
51 {
52 firstImplRowId = startRowNumber + 1;
53 lastImplRowId = endRowNumber + 1;
54 }
55 }
56
57 internal EntityHandle GetInterface(int rowId)
58 {
59 int num = (rowId - 1) * RowSize;
61 }
62}
static EntityHandle ConvertToHandle(uint typeDefOrRefTag)
static void TableNotSorted(TableIndex tableIndex)
Definition Throw.cs:250
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)
void GetInterfaceImplRange(TypeDefinitionHandle typeDef, out int firstImplRowId, out int lastImplRowId)
InterfaceImplTableReader(int numberOfRows, bool declaredSorted, int typeDefTableRowRefSize, int typeDefOrRefRefSize, MemoryBlock containingBlock, int containingBlockOffset)