39 lines
910 B
C#
39 lines
910 B
C#
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();
|
|
}
|
|
}
|