protected OrderedSet(IComparer <TKey> comparer, IEqualityComparer <TKey> equalityComparer, ListPatch <KeyValuePair <TKey, TValue> > list) { this.comparer = comparer; this.equalityComparer = equalityComparer; kvComparer = new KeyValuePairComparer <TKey, TValue>(comparer); this.list = list; }
private void TransformListToDictionary() { dictionary = new Dictionary <TKey, TValue>(list.Capacity, EqualityComparer); foreach (var kv in list) { dictionary.Add(kv.Key, kv.Value); } list = null; }
public void AddOrdered(KeyValuePair <TKey, TValue>[] orderedAndUnique, int index, int count) { if (orderedAndUnique.Length == 0) { return; } if (set != null) { for (int i = 0; i < count; i++) { var kv = orderedAndUnique[index + i]; set.Replace(kv); } return; } if (dictionary != null) { for (int i = 0; i < count; i++) { var kv = orderedAndUnique[index + i]; dictionary[kv.Key] = kv.Value; } return; } if (list.Count == 0 || Comparer.Compare(list[list.Count - 1].Key, orderedAndUnique[index].Key) < 0) { list.AddRange(orderedAndUnique, index, count); return; } ListPatch <KeyValuePair <TKey, TValue> > tmp = new ListPatch <KeyValuePair <TKey, TValue> >(list.Count + count); tmp.AddRange(orderedAndUnique.Skip(index).Take(count).Merge(list, kvComparer)); list = tmp; }
private IndexRecordSet(IComparer <IData> comparer, IEqualityComparer <IData> equalityComparer, ListPatch <KeyValuePair <IData, IData> > list) : base(comparer, equalityComparer, list) { }
/// <summary> /// clear all data and set ordered set to default list mode /// </summary> private void Reset() { list = new ListPatch <KeyValuePair <TKey, TValue> >(); dictionary = null; set = null; }
private void TransformListToTree() { set = new SortedSet <KeyValuePair <TKey, TValue> >(kvComparer); set.ConstructFromSortedArray(list.Array, 0, list.Count); list = null; }