示例#1
0
        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;
        }
示例#2
0
        private void TransformListToDictionary()
        {
            dictionary = new Dictionary <TKey, TValue>(list.Capacity, EqualityComparer);

            foreach (var kv in list)
            {
                dictionary.Add(kv.Key, kv.Value);
            }

            list = null;
        }
示例#3
0
        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;
        }
示例#4
0
 private IndexRecordSet(IComparer <IData> comparer, IEqualityComparer <IData> equalityComparer, ListPatch <KeyValuePair <IData, IData> > list)
     : base(comparer, equalityComparer, list)
 {
 }
示例#5
0
 /// <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;
 }
示例#6
0
 private void TransformListToTree()
 {
     set = new SortedSet <KeyValuePair <TKey, TValue> >(kvComparer);
     set.ConstructFromSortedArray(list.Array, 0, list.Count);
     list = null;
 }