using System.Collections; using System.Collections.Generic;
namespace PgRr.System.Collections.Generic { public class UniqueQueue : IEnumerable, IEnumerable {
private HashSet hashSet = new HashSet();
private Queue queue = new Queue();
public int Count => hashSet.Count;
public void Clear() {
hashSet.Clear();
queue.Clear();
}
public bool Contains(T item) => hashSet.Contains(item);
public void Enqueue(T item) {
if (hashSet.Add(item)) {
queue.Enqueue(item);
} else {
throw new InvalidOperationException("The queue already contains this item");
}
}
public T Dequeue() {
T item = queue.Dequeue();
hashSet.Remove(item);
return item;
}
public T Peek() => queue.Peek();
public IEnumerator GetEnumerator() => queue.GetEnumerator();
IEnumerator IEnumerable.GetEnumerator() => queue.GetEnumerator();
}
}