// -----------------------------------------------------------------------
//
// Copyright (c) AillieoTech. All rights reserved.
//
// -----------------------------------------------------------------------
namespace TapTap.UI.AillieoTech
{
using System;
using System.Collections.Generic;
public class SimpleObjPool
{
private readonly Stack stack;
private readonly Func ctor;
private readonly Action onRecycle;
private int size;
private int usedCount;
public SimpleObjPool(int max = 7, Action onRecycle = null, Func ctor = null)
{
this.stack = new Stack(max);
this.size = max;
this.onRecycle = onRecycle;
this.ctor = ctor;
}
public T Get()
{
T item;
if (this.stack.Count == 0)
{
if (this.ctor != null)
{
item = this.ctor();
}
else
{
item = Activator.CreateInstance();
}
}
else
{
item = this.stack.Pop();
}
this.usedCount++;
return item;
}
public void Recycle(T item)
{
if (this.onRecycle != null)
{
this.onRecycle.Invoke(item);
}
if (this.stack.Count < this.size)
{
this.stack.Push(item);
}
this.usedCount--;
}
public void Purge()
{
// TODO
}
public override string ToString()
{
return $"SimpleObjPool: item=[{typeof(T)}], inUse=[{this.usedCount}], restInPool=[{this.stack.Count}/{this.size}] ";
}
}
}