Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
GenericParamTableReader.cs
Go to the documentation of this file.
2
4
5internal readonly struct GenericParamTableReader
6{
7 internal readonly int NumberOfRows;
8
9 private readonly bool _IsTypeOrMethodDefRefSizeSmall;
10
11 private readonly bool _IsStringHeapRefSizeSmall;
12
13 private readonly int _NumberOffset;
14
15 private readonly int _FlagsOffset;
16
17 private readonly int _OwnerOffset;
18
19 private readonly int _NameOffset;
20
21 internal readonly int RowSize;
22
23 internal readonly MemoryBlock Block;
24
25 internal GenericParamTableReader(int numberOfRows, bool declaredSorted, int typeOrMethodDefRefSize, int stringHeapRefSize, MemoryBlock containingBlock, int containingBlockOffset)
26 {
27 NumberOfRows = numberOfRows;
28 _IsTypeOrMethodDefRefSizeSmall = typeOrMethodDefRefSize == 2;
29 _IsStringHeapRefSizeSmall = stringHeapRefSize == 2;
30 _NumberOffset = 0;
33 _NameOffset = _OwnerOffset + typeOrMethodDefRefSize;
34 RowSize = _NameOffset + stringHeapRefSize;
35 Block = containingBlock.GetMemoryBlockAt(containingBlockOffset, RowSize * numberOfRows);
36 if (!declaredSorted && !CheckSorted())
37 {
38 Throw.TableNotSorted(TableIndex.GenericParam);
39 }
40 }
41
43 {
44 int num = (handle.RowId - 1) * RowSize;
45 return Block.PeekUInt16(num + _NumberOffset);
46 }
47
49 {
50 int num = (handle.RowId - 1) * RowSize;
52 }
53
59
65
67 {
68 ushort genericParamCount = 0;
69 uint searchCodedTag = TypeOrMethodDefTag.ConvertTypeDefRowIdToTag(typeDef);
70 int firstRowId = BinarySearchTag(searchCodedTag, ref genericParamCount);
71 return new GenericParameterHandleCollection(firstRowId, genericParamCount);
72 }
73
75 {
76 ushort genericParamCount = 0;
77 uint searchCodedTag = TypeOrMethodDefTag.ConvertMethodDefToTag(methodDef);
78 int firstRowId = BinarySearchTag(searchCodedTag, ref genericParamCount);
79 return new GenericParameterHandleCollection(firstRowId, genericParamCount);
80 }
81
82 private int BinarySearchTag(uint searchCodedTag, ref ushort genericParamCount)
83 {
84 Block.BinarySearchReferenceRange(NumberOfRows, RowSize, _OwnerOffset, searchCodedTag, _IsTypeOrMethodDefRefSizeSmall, out var startRowNumber, out var endRowNumber);
85 if (startRowNumber == -1)
86 {
87 genericParamCount = 0;
88 return 0;
89 }
90 genericParamCount = (ushort)(endRowNumber - startRowNumber + 1);
91 return startRowNumber + 1;
92 }
93
98}
static EntityHandle ConvertToHandle(uint typeOrMethodDef)
static uint ConvertTypeDefRowIdToTag(TypeDefinitionHandle typeDef)
static uint ConvertMethodDefToTag(MethodDefinitionHandle methodDef)
static void TableNotSorted(TableIndex tableIndex)
Definition Throw.cs:250
unsafe ushort PeekUInt16(int offset)
unsafe MemoryBlock GetMemoryBlockAt(int offset, int length)
bool IsOrderedByReferenceAscending(int rowSize, int referenceOffset, bool isReferenceSmall)
int PeekHeapReference(int offset, bool smallRefSize)
void BinarySearchReferenceRange(int rowCount, int rowSize, int referenceOffset, uint referenceValue, bool isReferenceSmall, out int startRowNumber, out int endRowNumber)
uint PeekTaggedReference(int offset, bool smallRefSize)
GenericParameterHandleCollection FindGenericParametersForType(TypeDefinitionHandle typeDef)
int BinarySearchTag(uint searchCodedTag, ref ushort genericParamCount)
GenericParameterHandleCollection FindGenericParametersForMethod(MethodDefinitionHandle methodDef)
GenericParamTableReader(int numberOfRows, bool declaredSorted, int typeOrMethodDefRefSize, int stringHeapRefSize, MemoryBlock containingBlock, int containingBlockOffset)
GenericParameterAttributes GetFlags(GenericParameterHandle handle)
static StringHandle FromOffset(int heapOffset)