namespace NBConfigBuilder;
///
/// 静态的对象池系统,不支持多线程。
///
///
public static class Pool where T : IPool, new()
{
private static readonly Queue PoolQueue = new Queue();
///
/// 池子里可用的数量
///
public static int Count => PoolQueue.Count;
///
/// 租借
///
///
public static T Rent()
{
return PoolQueue.Count == 0 ? new T() : PoolQueue.Dequeue();
}
///
/// 租借
///
/// 如果池子里没有,会先执行这个委托。
///
public static T Rent(Func generator)
{
return PoolQueue.Count == 0 ? generator() : PoolQueue.Dequeue();
}
///
/// 返还
///
///
public static void Return(T t)
{
if (t == null)
{
return;
}
PoolQueue.Enqueue(t);
}
///
/// 返还
///
/// 返还的东西
/// 返还后执行的委托
public static void Return(T t, Action reset)
{
if (t == null)
{
return;
}
reset(t);
PoolQueue.Enqueue(t);
}
///
/// 清空池子
///
public static void Clear()
{
PoolQueue.Clear();
}
}