示例#1
0
 internal DistinctDefaultEnumerator(ref TInnerEnumerator inner)
 {
     Inner             = inner;
     PreviouslyYielded = new CompactSet <TItem>();
     Container         = new IndexedItemContainer <TItem>();
     Current           = default(TItem);
 }
示例#2
0
        /// <summary>
        /// Creates a container with the specified content.
        /// </summary>
        /// <param name="source">The source.</param>
        /// <param name="value">The value.</param>
        /// <returns>The container.</returns>
        protected virtual IndexedItemContainer <TSource, TTarget> CreateContainer(TSource source, IObservable <TTarget> value)
        {
            var container = new IndexedItemContainer <TSource, TTarget>(source, value);

            container.ValueChanged += ContainerOnValueChanged;
            return(container);
        }
示例#3
0
 internal GroupingEnumerable(TKey key, uint count_singleIndex, int[] indexes, ref IndexedItemContainer <TElement> container)
 {
     Key = key;
     UsedIndexes_SingleIndex = count_singleIndex;
     ElementIndexes          = indexes;
     Elements = container.Items;
 }
示例#4
0
 /// <inheritdoc />
 protected override void RemoveContainer(IndexedItemContainer <T, bool> container)
 {
     if (container != null)
     {
         base.RemoveContainer(container);
     }
 }
示例#5
0
 internal DistinctSpecificEnumerator(ref TInnerEnumerator inner, IEqualityComparer <TItem> comparer)
 {
     Inner             = inner;
     Comparer          = comparer;
     PreviouslyYielded = new CompactSet <TItem>();
     Container         = new IndexedItemContainer <TItem>();
     Current           = default(TItem);
 }
示例#6
0
 internal ExceptDefaultEnumerator(ref TFirstEnumerator first, ref TSecondEnumerator second)
 {
     FirstInner     = first;
     SecondInner    = second;
     Container      = new IndexedItemContainer <TItem>();
     AlreadyYielded = new CompactSet <TItem>();
     Current        = default(TItem);
 }
示例#7
0
 /// <inheritdoc />
 protected override void InsertItem(int index, IndexedItemContainer <TSource, TTarget> item)
 {
     base.InsertItem(index, item);
     item.Index = index;
     for (int i = index + 1; i < Count; i++)
     {
         Items[i].Index = i;
     }
 }
示例#8
0
 internal UnionDefaultEnumerator(ref TFirstEnumerator first, ref TSecondEnumerator second)
 {
     FirstInner     = first;
     FirstFinished  = false;
     SecondInner    = second;
     AlreadyYielded = new CompactSet <TItem>();
     Container      = new IndexedItemContainer <TItem>();
     Current        = default(TItem);
 }
示例#9
0
 internal ExceptSpecificEnumerator(ref TFirstEnumerator first, ref TSecondEnumerator second, IEqualityComparer <TItem> comparer)
 {
     FirstInner     = first;
     SecondInner    = second;
     Container      = new IndexedItemContainer <TItem>();
     AlreadyYielded = new CompactSet <TItem>();
     Current        = default(TItem);
     Comparer       = comparer;
 }
示例#10
0
 public void Grow()
 {
     while (Containers.Count < Source.Count && Border is null)
     {
         var container = _owner.CreateContainer(Source[Containers.Count]);
         container.Index = Containers.Count;
         if (container.Value)
         {
             Containers.Add(container);
         }
         else
         {
             Border = container;
         }
     }
 }
示例#11
0
 public bool Remove(IndexedItemContainer <T, bool> item)
 {
     Count--;
     if (Containers.Remove(item))
     {
         if (Border != null)
         {
             Border.Index--;
         }
     }
     else if (Equals(Border, item))
     {
         Border = null;
     }
     return(true);
 }
示例#12
0
 public void RemoveAt(int index)
 {
     Count--;
     if (index < Containers.Count)
     {
         Containers.RemoveAt(index);
         if (Border != null)
         {
             Border.Index--;
         }
     }
     else if (index == Containers.Count)
     {
         Border = null;
     }
 }
示例#13
0
            public void Add(IndexedItemContainer <T, bool> item)
            {
                item.Index = Containers.Count;
                if (Border is null)
                {
                    if (item.Value)
                    {
                        Containers.Add(item);
                    }
                    else
                    {
                        Border = item;
                    }
                }

                Count++;
            }
示例#14
0
            public void Insert(int index, IndexedItemContainer <T, bool> item)
            {
                item.Index = index;
                if (index <= Containers.Count)
                {
                    if (Border != null)
                    {
                        Border.Index--;
                    }
                    if (item.Value)
                    {
                        Containers.Insert(index, item);
                    }
                    else
                    {
                        ReduceUpTo(item);
                    }
                }

                Count++;
            }
示例#15
0
 public void Clear()
 {
     Containers.Clear();
     Border = null;
     Count  = 0;
 }
示例#16
0
 public bool Contains(IndexedItemContainer <T, bool> item)
 {
     return(Source.Contains(item.Item));
 }
示例#17
0
 /// <summary>
 /// Disposes the specified container.
 /// </summary>
 /// <param name="container">The container.</param>
 protected virtual void RemoveContainer(IndexedItemContainer <TSource, TTarget> container)
 {
     container.ValueChanged -= ContainerOnValueChanged;
     container.Dispose();
     _onRemove?.Invoke(container.Value);
 }
示例#18
0
 /// <inheritdoc />
 protected override void SetItem(int index, IndexedItemContainer <TSource, TTarget> item)
 {
     base.SetItem(index, item);
     item.Index = index;
 }
示例#19
0
 public void ReduceUpTo(IndexedItemContainer <T, bool> item)
 {
     _owner.RemoveContainer(Border);
     Border = item;
     ReduceUpTo(item.Index);
 }