MoonTools.ECS/src/IDStorage.cs

40 lines
667 B
C#
Raw Normal View History

2022-04-08 05:52:03 +00:00
using System.Collections.Generic;
2022-03-05 02:01:44 +00:00
2022-04-08 05:52:03 +00:00
namespace MoonTools.ECS
2022-03-05 02:01:44 +00:00
{
2022-04-08 05:52:03 +00:00
internal class IDStorage
{
private int nextID = 0;
2022-03-05 02:01:44 +00:00
2022-04-08 05:52:03 +00:00
private readonly Stack<int> availableIDs = new Stack<int>();
private readonly HashSet<int> availableIDHash = new HashSet<int>();
2022-03-05 02:01:44 +00:00
2022-04-08 05:52:03 +00:00
public int NextID()
2022-03-05 02:01:44 +00:00
{
2022-04-08 05:52:03 +00:00
if (availableIDs.Count > 0)
{
var id = availableIDs.Pop();
availableIDHash.Remove(id);
return id;
}
else
{
var id = nextID;
nextID += 1;
return id;
}
2022-03-05 02:01:44 +00:00
}
2022-04-08 05:52:03 +00:00
public bool Taken(int id)
2022-03-05 02:01:44 +00:00
{
2022-04-08 05:52:03 +00:00
return !availableIDHash.Contains(id) && id < nextID;
2022-03-05 02:01:44 +00:00
}
2022-04-08 05:52:03 +00:00
public void Release(int id)
{
availableIDs.Push(id);
availableIDHash.Add(id);
}
2022-03-05 02:01:44 +00:00
}
}