70 lines
1.3 KiB
C#
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;
|
|
}
|
|
}
|
|
}
|
|
|
|
|