| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 |
- 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)
- {
- lock (Ids)
- {
- return Ids.Remove(Id);
- }
- }
- }
- }
|