2022-03-05 02:01:44 +00:00
|
|
|
|
namespace MoonTools.ECS;
|
|
|
|
|
|
|
|
|
|
internal class IDStorage
|
|
|
|
|
{
|
|
|
|
|
private int nextID = 0;
|
|
|
|
|
|
|
|
|
|
private readonly Stack<int> availableIDs = new Stack<int>();
|
|
|
|
|
|
|
|
|
|
public int NextID()
|
|
|
|
|
{
|
|
|
|
|
if (availableIDs.Count > 0)
|
|
|
|
|
{
|
|
|
|
|
return availableIDs.Pop();
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
var id = nextID;
|
|
|
|
|
nextID += 1;
|
|
|
|
|
return id;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2022-03-31 23:15:30 +00:00
|
|
|
|
public bool Taken(int id)
|
|
|
|
|
{
|
|
|
|
|
return !availableIDs.Contains(id) && id < nextID;
|
|
|
|
|
}
|
|
|
|
|
|
2022-03-05 02:01:44 +00:00
|
|
|
|
public void Release(int id)
|
|
|
|
|
{
|
|
|
|
|
availableIDs.Push(id);
|
|
|
|
|
}
|
|
|
|
|
}
|