using System.Collections.Generic; namespace IsoTools.Internal { public class IsoAssocList { IsoList _list; Dictionary _dict; public IsoAssocList() { _list = new IsoList(); _dict = new Dictionary(); } public IsoAssocList(int capacity) { _list = new IsoList(capacity); _dict = new Dictionary(capacity); } public T this[int index] { get { return _list[index]; } } public int this[T item] { get { return _dict[item]; } } public int Count { get { return _list.Count; } } public bool Contains(T item) { return _dict.ContainsKey(item); } public bool Add(T item) { if ( _dict.ContainsKey(item) ) { return false; } _dict.Add(item, _list.Count); _list.Push(item); return true; } public bool Remove(T item) { int index; if ( _dict.TryGetValue(item, out index) ) { _dict.Remove(item); _list.UnorderedRemoveAt(index); if ( index != _list.Count ) { _dict[_list[index]] = index; } return true; } return false; } public void Clear() { _list.Clear(); _dict.Clear(); } } }