MoonTools.ECS/src/Rev2/IdAssigner.cs

27 lines
377 B
C#
Raw Normal View History

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