using System;
namespace Zenject
{
public interface IMemoryPool
{
int NumTotal { get; }
int NumActive { get; }
int NumInactive { get; }
Type ItemType
{
get;
}
///
/// Changes pool size by creating new elements or destroying existing elements
/// This bypasses the configured expansion method (OneAtATime or Doubling)
///
void Resize(int desiredPoolSize);
void Clear();
///
/// Expands the pool by the additional size.
/// This bypasses the configured expansion method (OneAtATime or Doubling)
///
/// The additional number of items to allocate in the pool
void ExpandBy(int numToAdd);
///
/// Shrinks the MemoryPool by removing a given number of elements
/// This bypasses the configured expansion method (OneAtATime or Doubling)
///
/// The amount of items to remove from the pool
void ShrinkBy(int numToRemove);
void Despawn(object obj);
}
public interface IDespawnableMemoryPool : IMemoryPool
{
void Despawn(TValue item);
}
public interface IMemoryPool : IDespawnableMemoryPool
{
TValue Spawn();
}
public interface IMemoryPool : IDespawnableMemoryPool
{
TValue Spawn(TParam1 param);
}
public interface IMemoryPool : IDespawnableMemoryPool
{
TValue Spawn(TParam1 param1, TParam2 param2);
}
public interface IMemoryPool : IDespawnableMemoryPool
{
TValue Spawn(TParam1 param1, TParam2 param2, TParam3 param3);
}
public interface IMemoryPool : IDespawnableMemoryPool
{
TValue Spawn(TParam1 param1, TParam2 param2, TParam3 param3, TParam4 param4);
}
public interface IMemoryPool : IDespawnableMemoryPool
{
TValue Spawn(TParam1 param1, TParam2 param2, TParam3 param3, TParam4 param4, TParam5 param5);
}
public interface IMemoryPool : IDespawnableMemoryPool
{
TValue Spawn(TParam1 param1, TParam2 param2, TParam3 param3, TParam4 param4, TParam5 param5, TParam6 param6);
}
public interface IMemoryPool : IDespawnableMemoryPool
{
TValue Spawn(TParam1 param1, TParam2 param2, TParam3 param3, TParam4 param4, TParam5 param5, TParam6 param6, TParam7 param7);
}
public interface IMemoryPool : IDespawnableMemoryPool
{
TValue Spawn(TParam1 param1, TParam2 param2, TParam3 param3, TParam4 param4, TParam5 param5, TParam6 param6, TParam7 param7, TParam8 param8);
}
}