mirror of
https://github.com/MrOkiDoki/BattleBit-Community-Server-API.git
synced 2025-02-02 14:37:15 -03:00
47 lines
1.2 KiB
C#
47 lines
1.2 KiB
C#
namespace BattleBitAPI.Pooling
|
|
{
|
|
public class ItemPooling<TItem>
|
|
{
|
|
private Queue<ItemPooling<TItem>.List> mPool;
|
|
private int mDefaultCount;
|
|
public ItemPooling(int defaultCount)
|
|
{
|
|
this.mPool = new Queue<ItemPooling<TItem>.List>(6);
|
|
this.mDefaultCount = defaultCount;
|
|
}
|
|
|
|
public ItemPooling<TItem>.List Get()
|
|
{
|
|
lock (mPool)
|
|
{
|
|
if (mPool.Count > 0)
|
|
return mPool.Dequeue();
|
|
}
|
|
return new ItemPooling<TItem>.List(this, mDefaultCount);
|
|
}
|
|
public void Post(ItemPooling<TItem>.List item)
|
|
{
|
|
lock (mPool)
|
|
mPool.Enqueue(item);
|
|
}
|
|
|
|
public class List : IDisposable
|
|
{
|
|
private ItemPooling<TItem> mParent;
|
|
public List<TItem> ListItems;
|
|
|
|
public List(ItemPooling<TItem> parent, int count)
|
|
{
|
|
this.mParent = parent;
|
|
this.ListItems = new List<TItem>(count);
|
|
}
|
|
|
|
|
|
public void Dispose()
|
|
{
|
|
ListItems.Clear();
|
|
mParent.Post(this);
|
|
}
|
|
}
|
|
}
|
|
}
|