2023-10-19 22:41:49 +00:00
|
|
|
using System.Collections.Generic;
|
|
|
|
|
|
|
|
namespace MoonTools.ECS.Rev2
|
|
|
|
{
|
2023-10-26 23:16:28 +00:00
|
|
|
internal class IdAssigner
|
2023-10-19 22:41:49 +00:00
|
|
|
{
|
2023-10-26 23:16:28 +00:00
|
|
|
ulong Next;
|
|
|
|
Queue<ulong> AvailableIds = new Queue<ulong>();
|
2023-10-19 22:41:49 +00:00
|
|
|
|
2023-10-26 23:16:28 +00:00
|
|
|
public Id Assign()
|
2023-10-19 22:41:49 +00:00
|
|
|
{
|
|
|
|
if (!AvailableIds.TryDequeue(out var id))
|
|
|
|
{
|
|
|
|
id = Next;
|
|
|
|
Next += 1;
|
|
|
|
}
|
|
|
|
|
2023-10-26 23:16:28 +00:00
|
|
|
return new Id(id);
|
2023-10-19 22:41:49 +00:00
|
|
|
}
|
|
|
|
|
2023-10-26 23:16:28 +00:00
|
|
|
public void Unassign(Id id)
|
2023-10-19 22:41:49 +00:00
|
|
|
{
|
2023-10-26 23:16:28 +00:00
|
|
|
AvailableIds.Enqueue(id.Value);
|
2023-10-19 22:41:49 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|