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);
 }
示例#2
0
        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);
        }
示例#3
0
 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);
 }
示例#4
0
 public void Dispose(IUnmanagedMemoryPool pool)
 {
     pool.Return(ref Span);
     pool.Return(ref Table);
 }
示例#5
0
 public void Dispose(IUnmanagedMemoryPool pool)
 {
     pool.Return(ref Keys);
     pool.Return(ref Values);
     pool.Return(ref Table);
 }
示例#6
0
 public void Dispose(IUnmanagedMemoryPool pool)
 {
     pool.Return(ref availableIds);
     //This simplifies reuse and makes it harder to use invalid data.
     this = default;
 }
示例#7
0
 public void Dispose(IUnmanagedMemoryPool pool)
 {
     Span.ClearManagedReferences(0, Count);
     pool.Return(ref Span);
     pool.Return(ref Table);
 }