MoonTools.ECS/src/Rev2/IdAssigner.cs

32 lines
466 B
C#
Raw Normal View History

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 23:25:33 +00:00
uint Next;
NativeArray<uint> AvailableIds = new NativeArray<uint>();
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
}
}