public void Dispose(IUnmanagedMemoryPool pool) { Keys.ClearManagedReferences(0, Count); Values.ClearManagedReferences(0, Count); pool.Return(ref Keys); pool.Return(ref Values); pool.Return(ref Table); }
void InternalResize(int newSize, IUnmanagedMemoryPool pool) { var oldAvailableIds = availableIds; pool.TakeAtLeast(newSize, out availableIds); Debug.Assert(oldAvailableIds.Length != availableIds.Length, "Did you really mean to resize this? Nothing changed!"); oldAvailableIds.CopyTo(0, ref availableIds, 0, availableIdCount); pool.Return(ref oldAvailableIds); }
public void Return(int id, IUnmanagedMemoryPool pool) { Debug.Assert(availableIds.Allocated); if (availableIdCount == availableIds.Length) { var oldAvailableIds = availableIds; pool.TakeAtLeast(Math.Max(availableIdCount * 2, availableIds.Length), out availableIds); oldAvailableIds.CopyTo(0, ref availableIds, 0, availableIdCount); pool.Return(ref oldAvailableIds); } ReturnUnsafely(id); }
public void Dispose(IUnmanagedMemoryPool pool) { pool.Return(ref Span); pool.Return(ref Table); }
public void Dispose(IUnmanagedMemoryPool pool) { pool.Return(ref Keys); pool.Return(ref Values); pool.Return(ref Table); }
public void Dispose(IUnmanagedMemoryPool pool) { pool.Return(ref availableIds); //This simplifies reuse and makes it harder to use invalid data. this = default; }
public void Dispose(IUnmanagedMemoryPool pool) { Span.ClearManagedReferences(0, Count); pool.Return(ref Span); pool.Return(ref Table); }