internal DistinctDefaultEnumerator(ref TInnerEnumerator inner) { Inner = inner; PreviouslyYielded = new CompactSet <TItem>(); Container = new IndexedItemContainer <TItem>(); Current = default(TItem); }
/// <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); }
internal GroupingEnumerable(TKey key, uint count_singleIndex, int[] indexes, ref IndexedItemContainer <TElement> container) { Key = key; UsedIndexes_SingleIndex = count_singleIndex; ElementIndexes = indexes; Elements = container.Items; }
/// <inheritdoc /> protected override void RemoveContainer(IndexedItemContainer <T, bool> container) { if (container != null) { base.RemoveContainer(container); } }
internal DistinctSpecificEnumerator(ref TInnerEnumerator inner, IEqualityComparer <TItem> comparer) { Inner = inner; Comparer = comparer; PreviouslyYielded = new CompactSet <TItem>(); Container = new IndexedItemContainer <TItem>(); Current = default(TItem); }
internal ExceptDefaultEnumerator(ref TFirstEnumerator first, ref TSecondEnumerator second) { FirstInner = first; SecondInner = second; Container = new IndexedItemContainer <TItem>(); AlreadyYielded = new CompactSet <TItem>(); Current = default(TItem); }
/// <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; } }
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); }
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; }
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; } } }
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); }
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; } }
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++; }
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++; }
public void Clear() { Containers.Clear(); Border = null; Count = 0; }
public bool Contains(IndexedItemContainer <T, bool> item) { return(Source.Contains(item.Item)); }
/// <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); }
/// <inheritdoc /> protected override void SetItem(int index, IndexedItemContainer <TSource, TTarget> item) { base.SetItem(index, item); item.Index = index; }
public void ReduceUpTo(IndexedItemContainer <T, bool> item) { _owner.RemoveContainer(Border); Border = item; ReduceUpTo(item.Index); }