2023-04-03 11:04:31 +08:00

70 lines
1.3 KiB
C#

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
namespace BF
{
public class BFStackPool<T>
{
private BFNode<T> top;
private int count;
public int Count { get { return count; } }
public BFStackPool()
{
top = null;
count = 0;
}
public BFStackPool(int count)
{
for (int i = 0; i < count; i++)
{
var node = new BFNode<T>();
Push(node);
}
}
public BFNode<T> Alloc(T item)
{
var node = SafePop();
node.item = item;
return node;
}
public void Free(BFNode<T> node)
{
node.Invalidate();
Push(node);
}
public BFNode<T> SafePop()
{
if (count == 0)
return new BFNode<T>();
var temp = top;
top = top.next;
--count;
return temp;
}
public void Push(BFNode<T> node)
{
var temp = top;
node.next = top;
top = node;
++count;
}
public void Clear()
{
top = null;
count = 0;
}
}
}