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); } }