mirror of
https://github.com/DCFApixels/DragonECS-Graphs.git
synced 2025-09-18 03:34:35 +08:00
stash
This commit is contained in:
parent
5d4573f431
commit
2473c5dc78
@ -165,9 +165,28 @@ namespace DCFApixels.DragonECS.Relations.Internal
|
|||||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
public static T* Resize<T>(void* oldPointer, int newCount) where T : unmanaged
|
public static T* Resize<T>(void* oldPointer, int newCount) where T : unmanaged
|
||||||
{
|
{
|
||||||
return (T*)(Marshal.ReAllocHGlobal(
|
return (T*)Marshal.ReAllocHGlobal(
|
||||||
new IntPtr(oldPointer),
|
new IntPtr(oldPointer),
|
||||||
new IntPtr(Marshal.SizeOf<T>(default) * newCount))).ToPointer();
|
new IntPtr(Marshal.SizeOf<T>(default) * newCount)).ToPointer();
|
||||||
|
}
|
||||||
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
|
public static T* ResizeAndInit<T>(void* oldPointer, int oldSize, int newSize) where T : unmanaged
|
||||||
|
{
|
||||||
|
int sizeT = Marshal.SizeOf<T>(default);
|
||||||
|
T* result = (T*)Marshal.ReAllocHGlobal(
|
||||||
|
new IntPtr(oldPointer),
|
||||||
|
new IntPtr(sizeT * newSize)).ToPointer();
|
||||||
|
Init((byte*)result, sizeT * oldSize, sizeT * newSize);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
|
private static void Init(byte* pointer, int startByteIndex, int endByteIndex)
|
||||||
|
{
|
||||||
|
for (int i = startByteIndex; i < endByteIndex; i++)
|
||||||
|
{
|
||||||
|
*(pointer + i) = 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -82,6 +82,11 @@ namespace DCFApixels.DragonECS
|
|||||||
return _nodes[nodeIndex].value;
|
return _nodes[nodeIndex].value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private Node GetNode(int nodeIndex)
|
||||||
|
{
|
||||||
|
return _nodes[nodeIndex];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
public void RemoveFromBasket(int basketIndex, int nodeIndex)
|
public void RemoveFromBasket(int basketIndex, int nodeIndex)
|
||||||
@ -350,10 +355,57 @@ namespace DCFApixels.DragonECS
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
public IEnumerable<Node> Recycled
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
List<Node> result = new List<Node>();
|
||||||
|
Node curNode = new Node();
|
||||||
|
curNode.index = _basketList._recycledListLast;
|
||||||
|
|
||||||
|
while (curNode.index != -1)
|
||||||
|
{
|
||||||
|
BasketList.Node x = _basketList.GetNode(curNode.index);
|
||||||
|
curNode.prev = x.prev;
|
||||||
|
curNode.next = x.next;
|
||||||
|
|
||||||
|
result.Add(curNode);
|
||||||
|
curNode = new Node();
|
||||||
|
curNode.index = curNode.prev;
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
public IEnumerable<Node> AllNodes
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
List<Node> result = new List<Node>();
|
||||||
|
|
||||||
|
for (int i = 0; i < _basketList._nodes.Length; i++)
|
||||||
|
{
|
||||||
|
result.Add(new Node(_basketList._nodes[i].prev, i, _basketList._nodes[i].next));
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
}
|
||||||
public DebuggerProxy(BasketList basketList)
|
public DebuggerProxy(BasketList basketList)
|
||||||
{
|
{
|
||||||
_basketList = basketList;
|
_basketList = basketList;
|
||||||
}
|
}
|
||||||
|
public struct Node
|
||||||
|
{
|
||||||
|
public int prev;
|
||||||
|
public int index;
|
||||||
|
public int next;
|
||||||
|
public Node(int prev, int index, int next)
|
||||||
|
{
|
||||||
|
this.prev = prev;
|
||||||
|
this.index = index;
|
||||||
|
this.next = next;
|
||||||
|
}
|
||||||
|
public override string ToString() => $"node({prev}< {index} >{next})";
|
||||||
|
}
|
||||||
public struct BasketIteratorDebbugerProxy
|
public struct BasketIteratorDebbugerProxy
|
||||||
{
|
{
|
||||||
private BasketIterator _iterrator;
|
private BasketIterator _iterrator;
|
||||||
|
@ -8,6 +8,21 @@ using System.Runtime.CompilerServices;
|
|||||||
|
|
||||||
namespace DCFApixels.DragonECS.Relations.Internal
|
namespace DCFApixels.DragonECS.Relations.Internal
|
||||||
{
|
{
|
||||||
|
internal unsafe static class UnsafeArray
|
||||||
|
{
|
||||||
|
public static void Resize<T>(ref UnsafeArray<T> array, int newSize)
|
||||||
|
where T : unmanaged
|
||||||
|
{
|
||||||
|
array.ptr = UnmanagedArrayUtility.Resize<T>(array.ptr, newSize);
|
||||||
|
array.Length = newSize;
|
||||||
|
}
|
||||||
|
public static void ResizeAndInit<T>(ref UnsafeArray<T> array, int newSize)
|
||||||
|
where T : unmanaged
|
||||||
|
{
|
||||||
|
array.ptr = UnmanagedArrayUtility.ResizeAndInit<T>(array.ptr, array.Length, newSize);
|
||||||
|
array.Length = newSize;
|
||||||
|
}
|
||||||
|
}
|
||||||
[DebuggerTypeProxy(typeof(UnsafeArray<>.DebuggerProxy))]
|
[DebuggerTypeProxy(typeof(UnsafeArray<>.DebuggerProxy))]
|
||||||
internal unsafe struct UnsafeArray<T> : IDisposable, IEnumerable<T>
|
internal unsafe struct UnsafeArray<T> : IDisposable, IEnumerable<T>
|
||||||
where T : unmanaged
|
where T : unmanaged
|
||||||
|
Loading…
Reference in New Issue
Block a user