public bool AddAfter(OrderedSetNode <T> existing, T adding) { if (Mapping.ContainsKey(adding)) { return(false); } if (First == null) { OrderedSetNode <T> nd = new OrderedSetNode <T>(adding); Mapping[adding] = nd; First = nd; Last = nd; return(true); } OrderedSetNode <T> n = new OrderedSetNode <T>(adding, existing, existing.Next); Mapping[adding] = n; if (n.Next == null) { Last = n; existing.Next = n; return(true); } existing.Next.Previous = n; existing.Next = n; return(true); }
public bool Remove(T item) { OrderedSetNode <T> n = Mapping[item]; if (n != null) { if (n.Next == null && n.Previous == null) { First = null; Last = null; } else if (n.Next == null) { Last = n.Previous; n.Previous.Next = null; } else if (n.Previous == null) { First = n.Next; n.Next.Previous = null; } else { n.Next.Previous = n.Previous; n.Previous.Next = n.Next; } Mapping.Remove(item); return(true); } return(false); }
public void CopyTo(T[] array, int arrayIndex) { if (First == null) { return; } int len = array.Length; OrderedSetNode <T> rec = First; array[arrayIndex++] = rec.Key; while ((rec = rec.Next) != null) { array[arrayIndex++] = rec.Key; } }
public System.Collections.IEnumerator GetEnumerator() { if (First == null) { yield break; } OrderedSetNode <T> rec = First; yield return(rec.Key); while ((rec = rec.Next) != null) { yield return(rec.Key); } }
IEnumerator <T> IEnumerable <T> .GetEnumerator() { if (First == null) { yield break; } OrderedSetNode <T> rec = First; yield return(rec.Key); while ((rec = rec.Next) != null) { yield return(rec.Key); } }
public bool AddBefore(T existing, T adding) { if (Last == null) { OrderedSetNode <T> n = new OrderedSetNode <T>(adding); Mapping[adding] = n; First = n; Last = n; return(true); } else if (existing == null) { return(AddAfter(Last, adding)); } else { return(AddAfter(Mapping[existing], adding)); } }
public bool Add(T adding) { if (Mapping.ContainsKey(adding)) { return(false); } if (First == null) { OrderedSetNode <T> nd = new OrderedSetNode <T>(adding); Mapping[adding] = nd; First = nd; Last = nd; return(true); } OrderedSetNode <T> n = new OrderedSetNode <T>(adding, Last, null); Mapping[adding] = n; Last.Next = n; Last = n; return(true); }
public void Clear() { Mapping.Clear(); First = null; Last = null; }
public OrderedSetNode(K key, OrderedSetNode <K> previous, OrderedSetNode <K> next) { Key = key; Next = next; Previous = previous; }