Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches

◆ TryGet()

static CastResult System.Runtime.CompilerServices.CastHelpers.TryGet ( nuint source,
nuint target )
inlinestaticprivate

Definition at line 68 of file CastHelpers.cs.

69 {
70 ref int tableData = ref TableData(s_table);
71 int num = KeyToBucket(ref tableData, source, target);
72 int num2 = 0;
73 while (num2 < 8)
74 {
75 ref CastCacheEntry reference = ref Element(ref tableData, num);
76 int num3 = Volatile.Read(ref reference._version);
77 nuint source2 = reference._source;
78 num3 &= -2;
79 if (source2 == source)
80 {
81 nuint targetAndResult = reference._targetAndResult;
82 targetAndResult ^= target;
83 if (targetAndResult <= 1)
84 {
86 if (num3 != reference._version)
87 {
88 break;
89 }
90 return (CastResult)targetAndResult;
91 }
92 }
93 if (num3 == 0)
94 {
95 break;
96 }
97 num2++;
98 num = (num + num2) & TableMask(ref tableData);
99 }
100 return CastResult.MaybeCast;
101 }
static ref int TableData(int[] table)
static ref CastCacheEntry Element(ref int tableData, int index)
static int KeyToBucket(ref int tableData, nuint source, nuint target)
static int TableMask(ref int tableData)
static void ReadMemoryBarrier()
static bool Read(ref bool location)
Definition Volatile.cs:67

References System.Runtime.CompilerServices.CastHelpers.Element(), System.Runtime.CompilerServices.CastHelpers.KeyToBucket(), System.Threading.Volatile.Read(), System.Threading.Interlocked.ReadMemoryBarrier(), System.Runtime.CompilerServices.CastHelpers.s_table, System.source, System.Runtime.CompilerServices.CastHelpers.TableData(), and System.Runtime.CompilerServices.CastHelpers.TableMask().

Referenced by System.Runtime.CompilerServices.CastHelpers.ChkCast_Helper(), System.Runtime.CompilerServices.CastHelpers.ChkCastAny(), System.Runtime.CompilerServices.CastHelpers.IsInstance_Helper(), System.Runtime.CompilerServices.CastHelpers.IsInstanceOfAny(), and System.Runtime.CompilerServices.CastHelpers.StelemRef_Helper().