Example #1
0
File: Heaps.cs Project: xyuan/Naiad
        public void EnsureAllocation(ref RegionHandle <T> handle, int capacity)
        {
            if (handle.IsNull)
            {
                handle = Allocate(capacity);
            }
            else
            {
                if (capacity > heaps[handle.HeapIndex].Length)
                {
                    var newHandle = Allocate(capacity);

                    for (int i = 0; i < heaps[handle.HeapIndex].Length; i++)
                    {
                        newHandle.Handle.Array[newHandle.Handle.Offset + i] = handle.Handle.Array[handle.Handle.Offset + i];
                    }

                    for (int i = heaps[handle.HeapIndex].Length; i < heaps[newHandle.HeapIndex].Length; i++)
                    {
                        newHandle.Handle.Array[newHandle.Handle.Offset + i] = default(T);
                    }

                    Release(ref handle);

                    handle = newHandle;
                }
            }
        }
Example #2
0
 public void Release(ref RegionHandle<T> handle)
 {
     if (!handle.IsNull)
     {
         heaps[handle.HeapIndex].Release(handle.HeapOffset);
         handle = new RegionHandle<T>();
     }
 }
Example #3
0
        public RegionHandle<T> Dereference(int identifier)
        {
            var result = new RegionHandle<T>(identifier);

            if (!result.IsNull)
                result.Handle = heaps[result.HeapIndex].Dereference(result.HeapOffset);

            return result;
        }
Example #4
0
        public RegionHandle<T> Allocate(int capacity)
        {
            var index = 0;
            while (capacity > heaps[index].Length)
                index++;

            var result = new RegionHandle<T>(heaps[index].Allocate(), index);

            result.Handle = heaps[result.HeapIndex].Dereference(result.HeapOffset);

            return result;
        }