using System.Collections; namespace Jint.Runtime; internal sealed class OrderedSet : IEnumerable { internal List _list; internal HashSet _set; public OrderedSet(HashSet values) { _list = new List(values); _set = new HashSet(values); } public OrderedSet(IEqualityComparer comparer) { _list = []; _set = new HashSet(comparer); } public T this[int index] { get => _list[index]; set { if (_set.Add(value)) { _list[index] = value; } } } public OrderedSet Clone() { return new OrderedSet(EqualityComparer.Default) { _set = new HashSet(this._set, this._set.Comparer), _list = [.. this._list] }; } public void Add(T item) { if (_set.Add(item)) { _list.Add(item); } } public void Clear() { _list.Clear(); _set.Clear(); } public bool Contains(T item) => _set.Contains(item); public int Count => _list.Count; public bool Remove(T item) { _set.Remove(item); return _list.Remove(item); } public IEnumerator GetEnumerator() => _list.GetEnumerator(); IEnumerator IEnumerable.GetEnumerator() => GetEnumerator(); }