using System.Collections.Generic;
namespace Ryujinx.Core.OsHle.Utilities
{
class IdPool
private HashSet<int> Ids;
private int CurrId;
private int MinId;
private int MaxId;
public IdPool(int Min, int Max)
Ids = new HashSet<int>();
CurrId = Min;
MinId = Min;
MaxId = Max;
}
public IdPool() : this(1, int.MaxValue) { }
public int GenerateId()
lock (Ids)
for (int Cnt = MinId; Cnt < MaxId; Cnt++)
if (Ids.Add(CurrId))
return CurrId;
if (CurrId++ == MaxId)
CurrId = MinId;
return -1;
public bool DeleteId(int Id)
return Ids.Remove(Id);