> Zip <TOutItem, TFirstItem, TGenLookupKey, TGenLookupElement>( BuiltInEnumerable <TFirstItem> first, LookupDefaultEnumerable <TGenLookupKey, TGenLookupElement> second, Func <TFirstItem, GroupingEnumerable <TGenLookupKey, TGenLookupElement>, TOutItem> resultSelector ) { var firstBridged = Bridge(first, nameof(first)); if (second.IsDefaultValue()) { throw CommonImplementation.Uninitialized(nameof(second)); } if (resultSelector == null) { throw CommonImplementation.ArgumentNull(nameof(resultSelector)); } return (CommonImplementation.ZipImpl < TOutItem, TFirstItem, GroupingEnumerable <TGenLookupKey, TGenLookupElement>, BuiltInEnumerable <TFirstItem>, BuiltInEnumerator <TFirstItem>, LookupDefaultEnumerable <TGenLookupKey, TGenLookupElement>, LookupDefaultEnumerator <TGenLookupKey, TGenLookupElement> >(RefLocal(firstBridged), ref second, resultSelector)); }
public bool MoveNext() { if (InnerLookup.IsDefaultValue()) { InnerLookup = CommonImplementation.ToLookupImpl(ref Right, RightKeySelector); } while (Left.MoveNext()) { var cur = Left.Current; var curKey = LeftKeySelector(cur); if (curKey == null) { Current = ResultSelector(cur, EmptyCache <TKeyItem, TRightItem> .EmptyGrouped); return(true); } var forKey = InnerLookup[curKey]; var asGrouped = new GroupedEnumerable <TKeyItem, TRightItem>(ref forKey); Current = ResultSelector(cur, asGrouped); return(true); } return(false); }
public void Reset() { Left.Reset(); Right.Reset(); InnerLookup = default(LookupDefaultEnumerable <TKeyItem, TRightItem>); NeedsYield = default(GroupingEnumerator <TRightItem>); CurrentKey = default(TLeftItem); }
public static int Count <TLookupKey, TLookupElement>(this LookupDefaultEnumerable <TLookupKey, TLookupElement> source) { if (source.IsDefaultValue()) { throw CommonImplementation.Uninitialized(nameof(source)); } return(source.Count); }
public bool SequenceEqual <TGenKey, TGenElement>( LookupSpecificEnumerable <TGenKey, TGenElement> first, LookupDefaultEnumerable <TGenKey, TGenElement> second ) { return (CommonImplementation.SequenceEqual < GroupingEnumerable <TGenKey, TGenElement>, LookupSpecificEnumerable <TGenKey, TGenElement>, LookupSpecificEnumerator <TGenKey, TGenElement>, LookupDefaultEnumerable <TGenKey, TGenElement>, LookupDefaultEnumerator <TGenKey, TGenElement> >(ref first, ref second, null)); }
public bool SequenceEqual <TGenKey, TGenElement>( PlaceholderEnumerable <GroupingEnumerable <TGenKey, TGenElement> > first, LookupDefaultEnumerable <TGenKey, TGenElement> second ) { return (CommonImplementation.SequenceEqual < GroupingEnumerable <TGenKey, TGenElement>, PlaceholderEnumerable <GroupingEnumerable <TGenKey, TGenElement> >, PlaceholderEnumerator <GroupingEnumerable <TGenKey, TGenElement> >, LookupDefaultEnumerable <TGenKey, TGenElement>, LookupDefaultEnumerator <TGenKey, TGenElement> >(RefParam(first), ref second, null)); }
public bool SequenceEqual <TGenKey, TGenElement>( LookupDefaultEnumerable <TGenKey, TGenElement> first, LookupDefaultEnumerable <TGenKey, TGenElement> second, IEqualityComparer <GroupingEnumerable <TGenKey, TGenElement> > comparer ) { return (CommonImplementation.SequenceEqual < GroupingEnumerable <TGenKey, TGenElement>, LookupDefaultEnumerable <TGenKey, TGenElement>, LookupDefaultEnumerator <TGenKey, TGenElement>, LookupDefaultEnumerable <TGenKey, TGenElement>, LookupDefaultEnumerator <TGenKey, TGenElement> >(ref first, ref second, comparer)); }
public bool SequenceEqual <TGenKey, TGenElement, TGenInItem2, TGenEnumerable2, TGenEnumerator2>( LookupDefaultEnumerable <TGenKey, TGenElement> first, GroupBySpecificEnumerable <TGenInItem2, TGenKey, TGenElement, TGenEnumerable2, TGenEnumerator2> second ) where TGenEnumerable2 : struct, IStructEnumerable <TGenInItem2, TGenEnumerator2> where TGenEnumerator2 : struct, IStructEnumerator <TGenInItem2> { return (CommonImplementation.SequenceEqual < GroupingEnumerable <TGenKey, TGenElement>, LookupDefaultEnumerable <TGenKey, TGenElement>, LookupDefaultEnumerator <TGenKey, TGenElement>, GroupBySpecificEnumerable <TGenInItem2, TGenKey, TGenElement, TGenEnumerable2, TGenEnumerator2>, GroupBySpecificEnumerator <TGenInItem2, TGenKey, TGenElement, TGenEnumerator2> >(ref first, ref second, null)); }
public bool SequenceEqual <TGenInItem, TGenKey, TGenElement, TGenEnumerable, TGenEnumerator>( GroupByDefaultEnumerable <TGenInItem, TGenKey, TGenElement, TGenEnumerable, TGenEnumerator> first, LookupDefaultEnumerable <TGenKey, TGenElement> second ) where TGenEnumerable : struct, IStructEnumerable <TGenInItem, TGenEnumerator> where TGenEnumerator : struct, IStructEnumerator <TGenInItem> { return (CommonImplementation.SequenceEqual < GroupingEnumerable <TGenKey, TGenElement>, GroupByDefaultEnumerable <TGenInItem, TGenKey, TGenElement, TGenEnumerable, TGenEnumerator>, GroupByDefaultEnumerator <TGenInItem, TGenKey, TGenElement, TGenEnumerator>, LookupDefaultEnumerable <TGenKey, TGenElement>, LookupDefaultEnumerator <TGenKey, TGenElement> >(ref first, ref second, null)); }
internal GroupJoinDefaultEnumerator( ref TLeftEnumerator left, ref TRightEnumerator right, Func <TLeftItem, TKeyItem> leftKeySelector, Func <TRightItem, TKeyItem> rightKeySelector, Func <TLeftItem, GroupedEnumerable <TKeyItem, TRightItem>, TOutItem> resultSelector ) { Left = left; Right = right; LeftKeySelector = leftKeySelector; RightKeySelector = rightKeySelector; ResultSelector = resultSelector; InnerLookup = default(LookupDefaultEnumerable <TKeyItem, TRightItem>); Current = default(TOutItem); }
> Concat <TGenLookupKey, TGenLookupElement>( PlaceholderEnumerable <GroupingEnumerable <TGenLookupKey, TGenLookupElement> > first, LookupDefaultEnumerable <TGenLookupKey, TGenLookupElement> second ) { return (CommonImplementation.Concat < GroupingEnumerable <TGenLookupKey, TGenLookupElement>, PlaceholderEnumerable <GroupingEnumerable <TGenLookupKey, TGenLookupElement> >, PlaceholderEnumerator <GroupingEnumerable <TGenLookupKey, TGenLookupElement> >, LookupDefaultEnumerable <TGenLookupKey, TGenLookupElement>, LookupDefaultEnumerator <TGenLookupKey, TGenLookupElement> >( RefParam(first), ref second )); }
> Concat <TGenLookupKey, TGenLookupElement>( LookupSpecificEnumerable <TGenLookupKey, TGenLookupElement> first, LookupDefaultEnumerable <TGenLookupKey, TGenLookupElement> second ) { return (CommonImplementation.Concat < GroupingEnumerable <TGenLookupKey, TGenLookupElement>, LookupSpecificEnumerable <TGenLookupKey, TGenLookupElement>, LookupSpecificEnumerator <TGenLookupKey, TGenLookupElement>, LookupDefaultEnumerable <TGenLookupKey, TGenLookupElement>, LookupDefaultEnumerator <TGenLookupKey, TGenLookupElement> >( ref first, ref second )); }
> Concat <TGenLookupKey, TGenLookupElement, TGenGroupByInItem2, TGenGroupByEnumerable2, TGenGroupByEnumerator2>( LookupDefaultEnumerable <TGenLookupKey, TGenLookupElement> first, GroupBySpecificEnumerable <TGenGroupByInItem2, TGenLookupKey, TGenLookupElement, TGenGroupByEnumerable2, TGenGroupByEnumerator2> second ) where TGenGroupByEnumerable2 : struct, IStructEnumerable <TGenGroupByInItem2, TGenGroupByEnumerator2> where TGenGroupByEnumerator2 : struct, IStructEnumerator <TGenGroupByInItem2> { return (CommonImplementation.Concat < GroupingEnumerable <TGenLookupKey, TGenLookupElement>, LookupDefaultEnumerable <TGenLookupKey, TGenLookupElement>, LookupDefaultEnumerator <TGenLookupKey, TGenLookupElement>, GroupBySpecificEnumerable <TGenGroupByInItem2, TGenLookupKey, TGenLookupElement, TGenGroupByEnumerable2, TGenGroupByEnumerator2>, GroupBySpecificEnumerator <TGenGroupByInItem2, TGenLookupKey, TGenLookupElement, TGenGroupByEnumerator2> >( ref first, ref second )); }
> Concat <TGenGroupByInItem, TGenLookupKey, TGenLookupElement, TGenGroupByEnumerable, TGenGroupByEnumerator>( GroupBySpecificEnumerable <TGenGroupByInItem, TGenLookupKey, TGenLookupElement, TGenGroupByEnumerable, TGenGroupByEnumerator> first, LookupDefaultEnumerable <TGenLookupKey, TGenLookupElement> second ) where TGenGroupByEnumerable : struct, IStructEnumerable <TGenGroupByInItem, TGenGroupByEnumerator> where TGenGroupByEnumerator : struct, IStructEnumerator <TGenGroupByInItem> { return (CommonImplementation.Concat < GroupingEnumerable <TGenLookupKey, TGenLookupElement>, GroupBySpecificEnumerable <TGenGroupByInItem, TGenLookupKey, TGenLookupElement, TGenGroupByEnumerable, TGenGroupByEnumerator>, GroupBySpecificEnumerator <TGenGroupByInItem, TGenLookupKey, TGenLookupElement, TGenGroupByEnumerator>, LookupDefaultEnumerable <TGenLookupKey, TGenLookupElement>, LookupDefaultEnumerator <TGenLookupKey, TGenLookupElement> >( ref first, ref second )); }
> Except <TGenGroupByKey, TGenGroupByElement>( BuiltInEnumerable <GroupingEnumerable <TGenGroupByKey, TGenGroupByElement> > first, LookupDefaultEnumerable <TGenGroupByKey, TGenGroupByElement> second ) { var firstBridge = Bridge(first, nameof(first)); if (second.IsDefaultValue()) { throw CommonImplementation.Uninitialized(nameof(second)); } return(CommonImplementation.ExceptImpl < GroupingEnumerable <TGenGroupByKey, TGenGroupByElement>, BuiltInEnumerable <GroupingEnumerable <TGenGroupByKey, TGenGroupByElement> >, BuiltInEnumerator <GroupingEnumerable <TGenGroupByKey, TGenGroupByElement> >, LookupDefaultEnumerable <TGenGroupByKey, TGenGroupByElement>, LookupDefaultEnumerator <TGenGroupByKey, TGenGroupByElement> >(RefLocal(firstBridge), ref second)); }
> Join <TOutItem, TJoinKeyItem, TJoinLeftItem, TGenLookupKey, TGenLookupElement>( BuiltInEnumerable <TJoinLeftItem> outer, LookupDefaultEnumerable <TGenLookupKey, TGenLookupElement> inner, Func <TJoinLeftItem, TJoinKeyItem> outerKeySelector, Func <GroupingEnumerable <TGenLookupKey, TGenLookupElement>, TJoinKeyItem> innerKeySelector, Func <TJoinLeftItem, GroupingEnumerable <TGenLookupKey, TGenLookupElement>, TOutItem> resultSelector, IEqualityComparer <TJoinKeyItem> comparer ) { var outerBridge = Bridge(outer, nameof(outer)); if (inner.IsDefaultValue()) { throw CommonImplementation.Uninitialized(nameof(inner)); } if (outerKeySelector == null) { throw CommonImplementation.ArgumentNull(nameof(outerKeySelector)); } if (innerKeySelector == null) { throw CommonImplementation.ArgumentNull(nameof(innerKeySelector)); } if (resultSelector == null) { throw CommonImplementation.ArgumentNull(nameof(resultSelector)); } return (CommonImplementation.JoinImpl < TOutItem, TJoinKeyItem, TJoinLeftItem, BuiltInEnumerable <TJoinLeftItem>, BuiltInEnumerator <TJoinLeftItem>, GroupingEnumerable <TGenLookupKey, TGenLookupElement>, LookupDefaultEnumerable <TGenLookupKey, TGenLookupElement>, LookupDefaultEnumerator <TGenLookupKey, TGenLookupElement> >(RefLocal(outerBridge), ref inner, outerKeySelector, innerKeySelector, resultSelector, comparer)); }
public bool SequenceEqual <TGenKey, TGenElement>( BuiltInEnumerable <GroupingEnumerable <TGenKey, TGenElement> > first, LookupDefaultEnumerable <TGenKey, TGenElement> second ) { var firstBridge = Bridge(first, nameof(second)); if (second.IsDefaultValue()) { throw CommonImplementation.Uninitialized(nameof(second)); } return (CommonImplementation.SequenceEqualImpl < GroupingEnumerable <TGenKey, TGenElement>, BuiltInEnumerable <GroupingEnumerable <TGenKey, TGenElement> >, BuiltInEnumerator <GroupingEnumerable <TGenKey, TGenElement> >, LookupDefaultEnumerable <TGenKey, TGenElement>, LookupDefaultEnumerator <TGenKey, TGenElement> >(RefLocal(firstBridge), ref second)); }
> GroupJoin <TResult, TGroupJoinKey, TOuter, TGenLookupKey, TGenLookupElement>( BuiltInEnumerable <TOuter> outer, LookupDefaultEnumerable <TGenLookupKey, TGenLookupElement> inner, Func <TOuter, TGroupJoinKey> outerKeySelector, Func <GroupingEnumerable <TGenLookupKey, TGenLookupElement>, TGroupJoinKey> innerKeySelector, Func <TOuter, GroupedEnumerable <TGroupJoinKey, GroupingEnumerable <TGenLookupKey, TGenLookupElement> >, TResult> resultSelector ) { var outerBridge = Bridge(outer, nameof(outer)); if (inner.IsDefaultValue()) { throw CommonImplementation.Uninitialized(nameof(inner)); } if (outerKeySelector == null) { throw CommonImplementation.ArgumentNull(nameof(outerKeySelector)); } if (innerKeySelector == null) { throw CommonImplementation.ArgumentNull(nameof(innerKeySelector)); } if (resultSelector == null) { throw CommonImplementation.ArgumentNull(nameof(resultSelector)); } return (CommonImplementation.GroupJoinImpl < TResult, TGroupJoinKey, TOuter, BuiltInEnumerable <TOuter>, BuiltInEnumerator <TOuter>, GroupingEnumerable <TGenLookupKey, TGenLookupElement>, LookupDefaultEnumerable <TGenLookupKey, TGenLookupElement>, LookupDefaultEnumerator <TGenLookupKey, TGenLookupElement> >(RefLocal(outerBridge), ref inner, outerKeySelector, innerKeySelector, resultSelector)); }
public bool MoveNext() { if (InnerLookup.IsDefaultValue()) { InnerLookup = CommonImplementation.ToLookupImpl(ref Right, RightKeySelector); } continueYielding: if (!NeedsYield.IsDefaultValue()) { if (NeedsYield.MoveNext()) { var rightCur = NeedsYield.Current; Current = ResultSelector(CurrentKey, rightCur); return(true); } NeedsYield.Dispose(); NeedsYield = default(GroupingEnumerator <TRightItem>); } while (Left.MoveNext()) { var cur = Left.Current; var curKey = LeftKeySelector(cur); if (curKey == null) { continue; } CurrentKey = cur; NeedsYield = InnerLookup[curKey].GetEnumerator(); goto continueYielding; } return(false); }
public void Dispose() { Left.Dispose(); Right.Dispose(); InnerLookup = default(LookupDefaultEnumerable <TKeyItem, TRightItem>); }
public void Reset() { Left.Reset(); Right.Reset(); InnerLookup = default(LookupDefaultEnumerable <TKeyItem, TRightItem>); }
public static int Count <TLookupKey, TLookupElement>(this LookupDefaultEnumerable <TLookupKey, TLookupElement> source, Func <GroupingEnumerable <TLookupKey, TLookupElement>, bool> predicate) => CommonImplementation.Count <GroupingEnumerable <TLookupKey, TLookupElement>, LookupDefaultEnumerable <TLookupKey, TLookupElement>, LookupDefaultEnumerator <TLookupKey, TLookupElement> >(ref source, predicate);
public static System.Collections.Generic.Stack <GroupingEnumerable <TKey, TItem> > Stack <TKey, TItem>(LookupDefaultEnumerable <TKey, TItem> second) => StackImpl <GroupingEnumerable <TKey, TItem>, LookupDefaultEnumerable <TKey, TItem>, LookupDefaultEnumerator <TKey, TItem> >(ref second);
public static System.Collections.Generic.LinkedList <GroupingEnumerable <TKey, TItem> > LinkedList <TKey, TItem>(LookupDefaultEnumerable <TKey, TItem> second) => LinkedListImpl <GroupingEnumerable <TKey, TItem>, LookupDefaultEnumerable <TKey, TItem>, LookupDefaultEnumerator <TKey, TItem> >(ref second);