Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
NativeMemory.cs
Go to the documentation of this file.
3
5
6public static class NativeMemory
7{
8 [CLSCompliant(false)]
9 public unsafe static void* Alloc(nuint elementCount, nuint elementSize)
10 {
11 nuint byteCount = GetByteCount(elementCount, elementSize);
12 return Alloc(byteCount);
13 }
14
15 [CLSCompliant(false)]
16 public unsafe static void* AllocZeroed(nuint byteCount)
17 {
18 return AllocZeroed(byteCount, 1u);
19 }
20
21 [MethodImpl(MethodImplOptions.AggressiveInlining)]
22 private unsafe static nuint GetByteCount(nuint elementCount, nuint elementSize)
23 {
24 nuint num = (nuint)((nint)1 << 4 * sizeof(UIntPtr));
25 if ((elementSize < num && elementCount < num) || elementSize == 0 || (nuint)UIntPtr.MaxValue / elementSize >= elementCount)
26 {
27 return elementCount * elementSize;
28 }
29 return UIntPtr.MaxValue;
30 }
31
32 [CLSCompliant(false)]
33 public unsafe static void* AlignedAlloc(nuint byteCount, nuint alignment)
34 {
35 if (!BitOperations.IsPow2(alignment))
36 {
37 ThrowHelper.ThrowArgumentException(ExceptionResource.Argument_AlignmentMustBePow2);
38 }
39 void* ptr = Interop.Ucrtbase._aligned_malloc((byteCount != 0) ? byteCount : 1, alignment);
40 if (ptr == null)
41 {
43 }
44 return ptr;
45 }
46
47 [CLSCompliant(false)]
48 public unsafe static void AlignedFree(void* ptr)
49 {
50 if (ptr != null)
51 {
53 }
54 }
55
56 [CLSCompliant(false)]
57 public unsafe static void* AlignedRealloc(void* ptr, nuint byteCount, nuint alignment)
58 {
59 if (!BitOperations.IsPow2(alignment))
60 {
61 ThrowHelper.ThrowArgumentException(ExceptionResource.Argument_AlignmentMustBePow2);
62 }
63 void* ptr2 = Interop.Ucrtbase._aligned_realloc(ptr, (byteCount != 0) ? byteCount : 1, alignment);
64 if (ptr2 == null)
65 {
67 }
68 return ptr2;
69 }
70
71 [CLSCompliant(false)]
72 public unsafe static void* Alloc(nuint byteCount)
73 {
74 void* ptr = Interop.Ucrtbase.malloc(byteCount);
75 if (ptr == null)
76 {
78 }
79 return ptr;
80 }
81
82 [CLSCompliant(false)]
83 public unsafe static void* AllocZeroed(nuint elementCount, nuint elementSize)
84 {
85 void* ptr = Interop.Ucrtbase.calloc(elementCount, elementSize);
86 if (ptr == null)
87 {
89 }
90 return ptr;
91 }
92
93 [CLSCompliant(false)]
94 public unsafe static void Free(void* ptr)
95 {
96 if (ptr != null)
97 {
99 }
100 }
101
102 [CLSCompliant(false)]
103 public unsafe static void* Realloc(void* ptr, nuint byteCount)
104 {
105 void* ptr2 = Interop.Ucrtbase.realloc(ptr, (byteCount != 0) ? byteCount : 1);
106 if (ptr2 == null)
107 {
109 }
110 return ptr2;
111 }
112}
static unsafe void * _aligned_malloc(nuint size, nuint alignment)
static unsafe void * realloc(void *ptr, nuint new_size)
static unsafe void _aligned_free(void *ptr)
static unsafe void free(void *ptr)
static unsafe void * _aligned_realloc(void *ptr, nuint size, nuint alignment)
static unsafe void * malloc(nuint size)
static unsafe void * calloc(nuint num, nuint size)
static bool IsPow2(int value)
static unsafe nuint GetByteCount(nuint elementCount, nuint elementSize)
static unsafe void * AlignedRealloc(void *ptr, nuint byteCount, nuint alignment)
static unsafe void * AllocZeroed(nuint elementCount, nuint elementSize)
static unsafe void * AlignedAlloc(nuint byteCount, nuint alignment)
static unsafe void AlignedFree(void *ptr)
static unsafe void * Realloc(void *ptr, nuint byteCount)
static unsafe void * AllocZeroed(nuint byteCount)
static unsafe void Free(void *ptr)
static unsafe void * Alloc(nuint elementCount, nuint elementSize)
static unsafe void * Alloc(nuint byteCount)
static void ThrowOutOfMemoryException()
static void ThrowArgumentException(ExceptionResource resource)
static UIntPtr MaxValue
Definition UIntPtr.cs:31