2023-10-30 19:11:50 +00:00
|
|
|
using MoonTools.ECS.Collections;
|
2023-10-19 22:41:49 +00:00
|
|
|
|
2023-10-30 19:11:50 +00:00
|
|
|
namespace MoonTools.ECS.Rev2;
|
|
|
|
|
|
|
|
internal class IdAssigner
|
2023-10-19 22:41:49 +00:00
|
|
|
{
|
2023-10-30 19:11:50 +00:00
|
|
|
ulong Next;
|
|
|
|
NativeArray<ulong> AvailableIds = new NativeArray<ulong>();
|
2023-10-19 22:41:49 +00:00
|
|
|
|
2023-10-30 19:11:50 +00:00
|
|
|
public Id Assign()
|
|
|
|
{
|
|
|
|
if (!AvailableIds.TryPop(out var id))
|
2023-10-19 22:41:49 +00:00
|
|
|
{
|
2023-10-30 19:11:50 +00:00
|
|
|
id = Next;
|
|
|
|
Next += 1;
|
2023-10-19 22:41:49 +00:00
|
|
|
}
|
|
|
|
|
2023-10-30 19:11:50 +00:00
|
|
|
return new Id(id);
|
|
|
|
}
|
|
|
|
|
|
|
|
public void Unassign(Id id)
|
|
|
|
{
|
|
|
|
AvailableIds.Add(id.Value);
|
|
|
|
}
|
|
|
|
|
|
|
|
public void CopyTo(IdAssigner other)
|
|
|
|
{
|
|
|
|
AvailableIds.CopyTo(other.AvailableIds);
|
|
|
|
other.Next = Next;
|
2023-10-19 22:41:49 +00:00
|
|
|
}
|
|
|
|
}
|