namespace GFramework.Core.Abstractions.pool;
///
/// 对象池系统接口,定义了对象池的基本操作
///
/// 池键的类型
/// 池中对象的类型,必须实现IPoolableObject接口
public interface IObjectPoolSystem
where TObject : IPoolableObject
where TKey : notnull
{
///
/// 从对象池中获取一个对象实例
///
/// 对象池的键
/// 池中的对象实例,如果池中没有可用对象则创建新实例
TObject Acquire(TKey key);
///
/// 将对象释放回对象池
///
/// 对象池的键
/// 要释放的对象
void Release(TKey key, TObject obj);
///
/// 清空所有对象池
///
void Clear();
///
/// 获取指定池的当前大小
///
/// 对象池的键
/// 池中可用对象的数量
int GetPoolSize(TKey key);
///
/// 获取指定池的活跃对象数量
///
/// 对象池的键
/// 已被获取但未释放的对象数量
int GetActiveCount(TKey key);
///
/// 设置指定池的最大容量
///
/// 对象池的键
/// 池中保留的最大对象数量。超过此数量时,释放的对象将被销毁而不是放回池中。设置为 0 表示无限制。
void SetMaxCapacity(TKey key, int maxCapacity);
///
/// 预热对象池,提前创建指定数量的对象
///
/// 对象池的键
/// 要预创建的对象数量
void Prewarm(TKey key, int count);
///
/// 获取指定池的统计信息
///
/// 对象池的键
/// 池的统计信息
PoolStatistics GetStatistics(TKey key);
}