aboutsummaryrefslogtreecommitdiff
path: root/lib/Utils
diff options
context:
space:
mode:
authorLibravatar vnugent <public@vaughnnugent.com>2023-06-16 13:33:43 -0400
committerLibravatar vnugent <public@vaughnnugent.com>2023-06-16 13:33:43 -0400
commit44f25885437d6d09ea04cf74db4556df95821d56 (patch)
treeb7876edf7b36f0c56ec9bcd947dcbcbb4a9b6a1f /lib/Utils
parentabbfe728fde9e0a5643b3c4e85d1cd27b15c59f4 (diff)
Some tcp buf, minor bits and bobs
Diffstat (limited to 'lib/Utils')
-rw-r--r--lib/Utils/src/Memory/NativeHeap.cs47
1 files changed, 13 insertions, 34 deletions
diff --git a/lib/Utils/src/Memory/NativeHeap.cs b/lib/Utils/src/Memory/NativeHeap.cs
index 5fc24b5..33ab120 100644
--- a/lib/Utils/src/Memory/NativeHeap.cs
+++ b/lib/Utils/src/Memory/NativeHeap.cs
@@ -112,65 +112,44 @@ namespace VNLib.Utils.Memory
throw;
}
}
-
-
- private readonly SafeLibraryHandle LibHandle;
- private AllocDelegate AllocMethod;
- private ReallocDelegate ReallocMethod;
- private FreeDelegate FreeMethod;
- private DestroyHeapDelegate Destroy;
+
+ private HeapMethods MethodTable;
private unsafe NativeHeap(UnmanagedHeapDescriptor* flags, HeapMethods methodTable) :base(flags->InternalFlags, true)
{
//Store heap pointer
- handle = flags->HeapPointer;
-
- //Store the method table
- AllocMethod = methodTable.Alloc;
- ReallocMethod = methodTable.Realloc;
- FreeMethod = methodTable.Free;
- Destroy = methodTable.Destroy;
+ SetHandle(flags->HeapPointer);
- //Store library
- LibHandle = methodTable.Library;
+ //Copy method table
+ MethodTable = methodTable;
}
///<inheritdoc/>
[MethodImpl(MethodImplOptions.AggressiveInlining)]
- protected override IntPtr AllocBlock(nuint elements, nuint size, bool zero) => AllocMethod(handle, elements, size, zero);
+ protected override IntPtr AllocBlock(nuint elements, nuint size, bool zero) => MethodTable.Alloc(handle, elements, size, zero);
///<inheritdoc/>
[MethodImpl(MethodImplOptions.AggressiveInlining)]
- protected override IntPtr ReAllocBlock(IntPtr block, nuint elements, nuint size, bool zero) => ReallocMethod(handle, block, elements, size, zero);
+ protected override IntPtr ReAllocBlock(IntPtr block, nuint elements, nuint size, bool zero) => MethodTable.Realloc(handle, block, elements, size, zero);
///<inheritdoc/>
[MethodImpl(MethodImplOptions.AggressiveInlining)]
- protected override bool FreeBlock(IntPtr block) => FreeMethod(handle, block);
+ protected override bool FreeBlock(IntPtr block) => MethodTable.Free(handle, block);
///<inheritdoc/>
protected override bool ReleaseHandle()
{
//Destroy the heap
- bool ret = Destroy(handle);
-
- //Cleanup the method table
- Cleanup();
+ bool ret = MethodTable.Destroy(handle);
//Free the library
- LibHandle.Dispose();
+ MethodTable.Library.Dispose();
- return ret;
- }
+ //Cleanup the method table
+ MethodTable = default;
-#nullable disable
- private void Cleanup()
- {
- AllocMethod = null;
- ReallocMethod = null;
- FreeMethod = null;
- Destroy = null;
+ return ret;
}
-#nullable enable
/*
* Delegate methods match the native header impl for unmanaged heaps