Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
Unsafe.cs
Go to the documentation of this file.
2
4
5public static class Unsafe
6{
7 [MethodImpl(MethodImplOptions.AggressiveInlining)]
8 [System.Runtime.Versioning.NonVersionable]
9 public unsafe static T Read<T>(void* source)
10 {
11 return Unsafe.Read<T>(source);
12 }
13
14 [MethodImpl(MethodImplOptions.AggressiveInlining)]
15 [System.Runtime.Versioning.NonVersionable]
16 public unsafe static T ReadUnaligned<T>(void* source)
17 {
18 return Unsafe.ReadUnaligned<T>(source);
19 }
20
21 [MethodImpl(MethodImplOptions.AggressiveInlining)]
22 [System.Runtime.Versioning.NonVersionable]
23 public static T ReadUnaligned<T>(ref byte source)
24 {
25 return Unsafe.ReadUnaligned<T>(ref source);
26 }
27
28 [MethodImpl(MethodImplOptions.AggressiveInlining)]
29 [System.Runtime.Versioning.NonVersionable]
30 public unsafe static void Write<T>(void* destination, T value)
31 {
32 Unsafe.Write(destination, value);
33 }
34
35 [MethodImpl(MethodImplOptions.AggressiveInlining)]
36 [System.Runtime.Versioning.NonVersionable]
37 public unsafe static void WriteUnaligned<T>(void* destination, T value)
38 {
39 Unsafe.WriteUnaligned(destination, value);
40 }
41
42 [MethodImpl(MethodImplOptions.AggressiveInlining)]
43 [System.Runtime.Versioning.NonVersionable]
44 public static void WriteUnaligned<T>(ref byte destination, T value)
45 {
46 Unsafe.WriteUnaligned(ref destination, value);
47 }
48
49 [MethodImpl(MethodImplOptions.AggressiveInlining)]
50 [System.Runtime.Versioning.NonVersionable]
51 public unsafe static void Copy<T>(void* destination, ref T source)
52 {
54 }
55
56 [MethodImpl(MethodImplOptions.AggressiveInlining)]
57 [System.Runtime.Versioning.NonVersionable]
58 public unsafe static void Copy<T>(ref T destination, void* source)
59 {
60 destination = Unsafe.Read<T>(source);
61 }
62
63 [MethodImpl(MethodImplOptions.AggressiveInlining)]
64 [System.Runtime.Versioning.NonVersionable]
65 public unsafe static void* AsPointer<T>(ref T value)
66 {
67 return Unsafe.AsPointer(ref value);
68 }
69
70 [MethodImpl(MethodImplOptions.AggressiveInlining)]
71 [System.Runtime.Versioning.NonVersionable]
72 public static void SkipInit<T>(out T value)
73 {
74 }
75
76 [MethodImpl(MethodImplOptions.AggressiveInlining)]
77 [System.Runtime.Versioning.NonVersionable]
78 public static int SizeOf<T>()
79 {
80 return Unsafe.SizeOf<T>();
81 }
82
83 [MethodImpl(MethodImplOptions.AggressiveInlining)]
84 [System.Runtime.Versioning.NonVersionable]
85 public unsafe static void CopyBlock(void* destination, void* source, uint byteCount)
86 {
87 // IL cpblk instruction
89 }
90
91 [MethodImpl(MethodImplOptions.AggressiveInlining)]
92 [System.Runtime.Versioning.NonVersionable]
93 public static void CopyBlock(ref byte destination, ref byte source, uint byteCount)
94 {
95 // IL cpblk instruction
97 }
98
99 [MethodImpl(MethodImplOptions.AggressiveInlining)]
100 [System.Runtime.Versioning.NonVersionable]
101 public unsafe static void CopyBlockUnaligned(void* destination, void* source, uint byteCount)
102 {
103 // IL cpblk instruction
105 }
106
107 [MethodImpl(MethodImplOptions.AggressiveInlining)]
108 [System.Runtime.Versioning.NonVersionable]
109 public static void CopyBlockUnaligned(ref byte destination, ref byte source, uint byteCount)
110 {
111 // IL cpblk instruction
113 }
114
115 [MethodImpl(MethodImplOptions.AggressiveInlining)]
116 [System.Runtime.Versioning.NonVersionable]
117 public unsafe static void InitBlock(void* startAddress, byte value, uint byteCount)
118 {
119 // IL initblk instruction
120 Unsafe.InitBlock(startAddress, value, byteCount);
121 }
122
123 [MethodImpl(MethodImplOptions.AggressiveInlining)]
124 [System.Runtime.Versioning.NonVersionable]
125 public static void InitBlock(ref byte startAddress, byte value, uint byteCount)
126 {
127 // IL initblk instruction
128 Unsafe.InitBlock(ref startAddress, value, byteCount);
129 }
130
131 [MethodImpl(MethodImplOptions.AggressiveInlining)]
132 [System.Runtime.Versioning.NonVersionable]
133 public unsafe static void InitBlockUnaligned(void* startAddress, byte value, uint byteCount)
134 {
135 // IL initblk instruction
137 }
138
139 [MethodImpl(MethodImplOptions.AggressiveInlining)]
140 [System.Runtime.Versioning.NonVersionable]
141 public static void InitBlockUnaligned(ref byte startAddress, byte value, uint byteCount)
142 {
143 // IL initblk instruction
144 Unsafe.InitBlockUnaligned(ref startAddress, value, byteCount);
145 }
146
147 [MethodImpl(MethodImplOptions.AggressiveInlining)]
148 [System.Runtime.Versioning.NonVersionable]
149 public static T As<T>(object o) where T : class
150 {
151 return (T)o;
152 }
153
154 [MethodImpl(MethodImplOptions.AggressiveInlining)]
155 [System.Runtime.Versioning.NonVersionable]
156 public unsafe static ref T AsRef<T>(void* source)
157 {
158 return ref *(T*)source;
159 }
160
161 [MethodImpl(MethodImplOptions.AggressiveInlining)]
162 [System.Runtime.Versioning.NonVersionable]
163 public static ref T AsRef<T>(in T source)
164 {
165 return ref source;
166 }
167
168 [MethodImpl(MethodImplOptions.AggressiveInlining)]
169 [System.Runtime.Versioning.NonVersionable]
170 public static ref TTo As<TFrom, TTo>(ref TFrom source)
171 {
172 return ref Unsafe.As<TFrom, TTo>(ref source);
173 }
174
175 [MethodImpl(MethodImplOptions.AggressiveInlining)]
176 [System.Runtime.Versioning.NonVersionable]
177 public static ref T Unbox<T>(object box) where T : struct
178 {
179 return ref (T)box;
180 }
181
182 [MethodImpl(MethodImplOptions.AggressiveInlining)]
183 [System.Runtime.Versioning.NonVersionable]
184 public static ref T Add<T>(ref T source, int elementOffset)
185 {
186 return ref Unsafe.Add(ref source, elementOffset);
187 }
188
189 [MethodImpl(MethodImplOptions.AggressiveInlining)]
190 [System.Runtime.Versioning.NonVersionable]
191 public unsafe static void* Add<T>(void* source, int elementOffset)
192 {
193 return (byte*)source + (nint)elementOffset * (nint)Unsafe.SizeOf<T>();
194 }
195
196 [MethodImpl(MethodImplOptions.AggressiveInlining)]
197 [System.Runtime.Versioning.NonVersionable]
198 public static ref T Add<T>(ref T source, IntPtr elementOffset)
199 {
200 return ref Unsafe.Add(ref source, elementOffset);
201 }
202
203 [MethodImpl(MethodImplOptions.AggressiveInlining)]
204 public static ref T Add<T>(ref T source, [System.Runtime.Versioning.NonVersionable] nuint elementOffset)
205 {
206 return ref Unsafe.Add(ref source, elementOffset);
207 }
208
209 [MethodImpl(MethodImplOptions.AggressiveInlining)]
210 [System.Runtime.Versioning.NonVersionable]
211 public static ref T AddByteOffset<T>(ref T source, IntPtr byteOffset)
212 {
213 return ref Unsafe.AddByteOffset(ref source, byteOffset);
214 }
215
216 [MethodImpl(MethodImplOptions.AggressiveInlining)]
217 public static ref T AddByteOffset<T>(ref T source, [System.Runtime.Versioning.NonVersionable] nuint byteOffset)
218 {
219 return ref Unsafe.AddByteOffset(ref source, byteOffset);
220 }
221
222 [MethodImpl(MethodImplOptions.AggressiveInlining)]
223 [System.Runtime.Versioning.NonVersionable]
224 public static ref T Subtract<T>(ref T source, int elementOffset)
225 {
226 return ref Unsafe.Subtract(ref source, elementOffset);
227 }
228
229 [MethodImpl(MethodImplOptions.AggressiveInlining)]
230 [System.Runtime.Versioning.NonVersionable]
231 public unsafe static void* Subtract<T>(void* source, int elementOffset)
232 {
233 return (byte*)source - (nint)elementOffset * (nint)Unsafe.SizeOf<T>();
234 }
235
236 [MethodImpl(MethodImplOptions.AggressiveInlining)]
237 [System.Runtime.Versioning.NonVersionable]
238 public static ref T Subtract<T>(ref T source, IntPtr elementOffset)
239 {
240 return ref Unsafe.Subtract(ref source, elementOffset);
241 }
242
243 [MethodImpl(MethodImplOptions.AggressiveInlining)]
244 public static ref T Subtract<T>(ref T source, [System.Runtime.Versioning.NonVersionable] nuint elementOffset)
245 {
246 return ref Unsafe.Subtract(ref source, elementOffset);
247 }
248
249 [MethodImpl(MethodImplOptions.AggressiveInlining)]
250 [System.Runtime.Versioning.NonVersionable]
251 public static ref T SubtractByteOffset<T>(ref T source, IntPtr byteOffset)
252 {
253 return ref Unsafe.SubtractByteOffset(ref source, byteOffset);
254 }
255
256 [MethodImpl(MethodImplOptions.AggressiveInlining)]
257 public static ref T SubtractByteOffset<T>(ref T source, [System.Runtime.Versioning.NonVersionable] nuint byteOffset)
258 {
259 return ref Unsafe.SubtractByteOffset(ref source, byteOffset);
260 }
261
262 [MethodImpl(MethodImplOptions.AggressiveInlining)]
263 [System.Runtime.Versioning.NonVersionable]
264 public static IntPtr ByteOffset<T>(ref T origin, ref T target)
265 {
266 return Unsafe.ByteOffset(target: ref target, origin: ref origin);
267 }
268
269 [MethodImpl(MethodImplOptions.AggressiveInlining)]
270 [System.Runtime.Versioning.NonVersionable]
271 public static bool AreSame<T>(ref T left, ref T right)
272 {
273 return Unsafe.AreSame(ref left, ref right);
274 }
275
276 [MethodImpl(MethodImplOptions.AggressiveInlining)]
277 [System.Runtime.Versioning.NonVersionable]
278 public static bool IsAddressGreaterThan<T>(ref T left, ref T right)
279 {
280 return Unsafe.IsAddressGreaterThan(ref left, ref right);
281 }
282
283 [MethodImpl(MethodImplOptions.AggressiveInlining)]
284 [System.Runtime.Versioning.NonVersionable]
285 public static bool IsAddressLessThan<T>(ref T left, ref T right)
286 {
287 return Unsafe.IsAddressLessThan(ref left, ref right);
288 }
289
290 [MethodImpl(MethodImplOptions.AggressiveInlining)]
291 [System.Runtime.Versioning.NonVersionable]
292 public unsafe static bool IsNullRef<T>(ref T source)
293 {
294 return Unsafe.AsPointer(ref source) == null;
295 }
296
297 [MethodImpl(MethodImplOptions.AggressiveInlining)]
298 [System.Runtime.Versioning.NonVersionable]
299 public unsafe static ref T NullRef<T>()
300 {
301 return ref *(T*)null;
302 }
303}
static unsafe void InitBlock(void *startAddress, byte value, uint byteCount)
Definition Unsafe.cs:117
static unsafe void * AsPointer< T >(ref T value)
Definition Unsafe.cs:65
static ref T Unbox< T >(object box)
Definition Unsafe.cs:177
static unsafe void Copy< T >(void *destination, ref T source)
Definition Unsafe.cs:51
static void CopyBlockUnaligned(ref byte destination, ref byte source, uint byteCount)
Definition Unsafe.cs:109
static bool AreSame< T >(ref T left, ref T right)
Definition Unsafe.cs:271
static IntPtr ByteOffset< T >(ref T origin, ref T target)
Definition Unsafe.cs:264
static unsafe ref T NullRef< T >()
Definition Unsafe.cs:299
static bool IsAddressGreaterThan< T >(ref T left, ref T right)
Definition Unsafe.cs:278
static void CopyBlock(ref byte destination, ref byte source, uint byteCount)
Definition Unsafe.cs:93
static unsafe T ReadUnaligned< T >(void *source)
Definition Unsafe.cs:16
static void InitBlock(ref byte startAddress, byte value, uint byteCount)
Definition Unsafe.cs:125
static ref T AddByteOffset< T >(ref T source, IntPtr byteOffset)
Definition Unsafe.cs:211
static unsafe void CopyBlock(void *destination, void *source, uint byteCount)
Definition Unsafe.cs:85
static bool IsAddressLessThan< T >(ref T left, ref T right)
Definition Unsafe.cs:285
static unsafe void WriteUnaligned< T >(void *destination, T value)
Definition Unsafe.cs:37
static ref T SubtractByteOffset< T >(ref T source, IntPtr byteOffset)
Definition Unsafe.cs:251
static void SkipInit< T >(out T value)
Definition Unsafe.cs:72
static ref TTo As< TFrom, TTo >(ref TFrom source)
Definition Unsafe.cs:170
static unsafe bool IsNullRef< T >(ref T source)
Definition Unsafe.cs:292
static unsafe T Read< T >(void *source)
Definition Unsafe.cs:9
static unsafe ref T AsRef< T >(void *source)
Definition Unsafe.cs:156
static unsafe void InitBlockUnaligned(void *startAddress, byte value, uint byteCount)
Definition Unsafe.cs:133
static ref T Subtract< T >(ref T source, int elementOffset)
Definition Unsafe.cs:224
static unsafe void CopyBlockUnaligned(void *destination, void *source, uint byteCount)
Definition Unsafe.cs:101
static void InitBlockUnaligned(ref byte startAddress, byte value, uint byteCount)
Definition Unsafe.cs:141
static unsafe void Write< T >(void *destination, T value)
Definition Unsafe.cs:30
static ref T Add< T >(ref T source, int elementOffset)
Definition Unsafe.cs:184