using System.Collections; using System.Collections.Generic; namespace Dashboard { public class HashList<T> : IReadOnlyList<T> where T : notnull { private readonly List<T> _list = new List<T>(); private readonly Dictionary<T, int> _map = new Dictionary<T, int>(); public T this[int index] => _list[index]; public int Count => _list.Count; public int Intern(T value) { if (_map.TryGetValue(value, out int index)) return index; index = Count; _list.Add(value); _map.Add(value, index); return index; } public void Clear() { _list.Clear(); _map.Clear(); } public IEnumerator<T> GetEnumerator() => _list.GetEnumerator(); IEnumerator IEnumerable.GetEnumerator() => _list.GetEnumerator(); } }