Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
DependentHandle.cs
Go to the documentation of this file.
3
4namespace System.Runtime;
5
7{
8 private IntPtr _handle;
9
10 public bool IsAllocated => _handle != (IntPtr)0;
11
12 public object? Target
13 {
14 get
15 {
17 if (handle == (IntPtr)0)
18 {
20 }
22 }
23 set
24 {
26 if (handle == (IntPtr)0 || value != null)
27 {
29 }
31 }
32 }
33
34 public object? Dependent
35 {
36 get
37 {
39 if (handle == (IntPtr)0)
40 {
42 }
44 }
45 set
46 {
48 if (handle == (IntPtr)0)
49 {
51 }
53 }
54 }
55
56 public (object? Target, object? Dependent) TargetAndDependent
57 {
58 get
59 {
61 if (handle == (IntPtr)0)
62 {
64 }
65 object dependent;
66 object item = InternalGetTargetAndDependent(handle, out dependent);
67 return (Target: item, Dependent: dependent);
68 }
69 }
70
71 public DependentHandle(object? target, object? dependent)
72 {
73 _handle = InternalInitialize(target, dependent);
74 }
75
76 internal object UnsafeGetTarget()
77 {
79 }
80
81 internal object UnsafeGetTargetAndDependent(out object dependent)
82 {
83 return InternalGetTargetAndDependent(_handle, out dependent);
84 }
85
90
91 internal void UnsafeSetDependent(object dependent)
92 {
93 InternalSetDependent(_handle, dependent);
94 }
95
96 public void Dispose()
97 {
99 if (handle != (IntPtr)0)
100 {
103 }
104 }
105
106 [MethodImpl(MethodImplOptions.InternalCall)]
107 private static extern IntPtr InternalInitialize(object target, object dependent);
108
109 private unsafe static object InternalGetTarget(IntPtr dependentHandle)
110 {
111 return Unsafe.As<IntPtr, object>(ref *(IntPtr*)dependentHandle);
112 }
113
114 [MethodImpl(MethodImplOptions.InternalCall)]
115 private static extern object InternalGetDependent(IntPtr dependentHandle);
116
117 [MethodImpl(MethodImplOptions.InternalCall)]
118 private static extern object InternalGetTargetAndDependent(IntPtr dependentHandle, out object dependent);
119
120 [MethodImpl(MethodImplOptions.InternalCall)]
121 private static extern void InternalSetDependent(IntPtr dependentHandle, object dependent);
122
123 [MethodImpl(MethodImplOptions.InternalCall)]
124 private static extern void InternalSetTargetToNull(IntPtr dependentHandle);
125
126 [MethodImpl(MethodImplOptions.InternalCall)]
127 private static extern void InternalFree(IntPtr dependentHandle);
128}
static void ThrowInvalidOperationException()
static readonly IntPtr Zero
Definition IntPtr.cs:18
static object InternalGetTargetAndDependent(IntPtr dependentHandle, out object dependent)
static unsafe object InternalGetTarget(IntPtr dependentHandle)
void UnsafeSetDependent(object dependent)
static void InternalSetTargetToNull(IntPtr dependentHandle)
static object InternalGetDependent(IntPtr dependentHandle)
static void InternalFree(IntPtr dependentHandle)
object UnsafeGetTargetAndDependent(out object dependent)
static IntPtr InternalInitialize(object target, object dependent)
DependentHandle(object? target, object? dependent)
static void InternalSetDependent(IntPtr dependentHandle, object dependent)
object?? object Dependent TargetAndDependent