using System.Collections; namespace Dashboard.Collections { public class TypeHashSet(bool hierarchical = false) : IEnumerable { private readonly HashSet _set = new HashSet(); public bool Contains() => _set.Contains(TypeAtom.Id); public bool Set() { if (!_set.Add(TypeAtom.Id)) return false; if (hierarchical) foreach (TypeAtom ancestor in TypeAtom.Ancestors) { _set.Add(ancestor.Id); } return true; } public bool Reset() { if (!_set.Remove(TypeAtom.Id)) return false; if (hierarchical) foreach (TypeAtom ancestor in TypeAtom.Ancestors) { _set.Remove(ancestor.Id); } return true; } public void Clear() => _set.Clear(); public IEnumerator GetEnumerator() => _set.Select(x => TypeAtom.Get(x)!).GetEnumerator(); IEnumerator IEnumerable.GetEnumerator() => GetEnumerator(); } }