using System; using System.Collections.Generic; namespace IsoTools.Internal { public class IsoAssocList { IsoList _list; Dictionary _dict; IEqualityComparer _comparer; public IsoAssocList() { _list = new IsoList(); _dict = new Dictionary(); _comparer = EqualityComparer.Default; } public IsoAssocList(int capacity) { _list = new IsoList(capacity); _dict = new Dictionary(capacity); _comparer = EqualityComparer.Default; } public IsoList RawList { get { return _list; } } public Dictionary RawDict { get { return _dict; } } public int Count { get { return _list.Count; } } public void Add(T item) { if ( !_dict.ContainsKey(item) ) { _dict.Add(item, _list.Count); _list.Push(item); } } public void Remove(T item) { int index; if ( _dict.TryGetValue(item, out index) ) { _dict.Remove(item); var reordered =_list.UnorderedRemoveAt(index); if ( !_comparer.Equals(reordered, item) ) { _dict[reordered] = index; } } } public void Clear() { _list.Clear(); _dict.Clear(); } } }