2023-10-19 22:41:49 +00:00
|
|
|
using System.Collections.Generic;
|
|
|
|
|
|
|
|
namespace MoonTools.ECS.Rev2
|
|
|
|
{
|
2023-10-25 01:44:41 +00:00
|
|
|
internal class IdAssigner<T> where T : struct, IHasId
|
2023-10-19 22:41:49 +00:00
|
|
|
{
|
|
|
|
int Next;
|
|
|
|
Queue<int> AvailableIds = new Queue<int>();
|
|
|
|
|
|
|
|
public T Assign()
|
|
|
|
{
|
|
|
|
if (!AvailableIds.TryDequeue(out var id))
|
|
|
|
{
|
|
|
|
id = Next;
|
|
|
|
Next += 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
return new T { Id = id };
|
|
|
|
}
|
|
|
|
|
|
|
|
public void Unassign(T idHaver)
|
|
|
|
{
|
|
|
|
AvailableIds.Enqueue(idHaver.Id);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|