public void Reset() { Left.Reset(); Right.Reset(); InnerLookup = default(LookupDefaultEnumerable <TKeyItem, TRightItem>); NeedsYield = default(GroupingEnumerator <TRightItem>); CurrentKey = default(TLeftItem); }
public void Dispose() { Left.Dispose(); Right.Dispose(); InnerLookup = default(LookupSpecificEnumerable <TKeyItem, TRightItem>); NeedsYield = default(GroupingEnumerator <TRightItem>); CurrentKey = default(TLeftItem); }
internal JoinDefaultEnumerator( ref TLeftEnumerator left, ref TRightEnumerator right, Func <TLeftItem, TKeyItem> leftKeySelector, Func <TRightItem, TKeyItem> rightKeySelector, Func <TLeftItem, TRightItem, TOutItem> resultSelector ) { Left = left; Right = right; LeftKeySelector = leftKeySelector; RightKeySelector = rightKeySelector; ResultSelector = resultSelector; InnerLookup = default(LookupDefaultEnumerable <TKeyItem, TRightItem>); Current = default(TOutItem); NeedsYield = default(GroupingEnumerator <TRightItem>); CurrentKey = default(TLeftItem); }
internal JoinSpecificEnumerator( ref TLeftEnumerator left, ref TRightEnumerator right, Func <TLeftItem, TKeyItem> leftKeySelector, Func <TRightItem, TKeyItem> rightKeySelector, Func <TLeftItem, TRightItem, TOutItem> resultSelector, IEqualityComparer <TKeyItem> comparer ) { Left = left; Right = right; LeftKeySelector = leftKeySelector; RightKeySelector = rightKeySelector; ResultSelector = resultSelector; InnerLookup = default(LookupSpecificEnumerable <TKeyItem, TRightItem>); Current = default(TOutItem); NeedsYield = default(GroupingEnumerator <TRightItem>); CurrentKey = default(TLeftItem); Comparer = comparer; }
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); }
internal GroupedEnumerator(ref GroupingEnumerator <TOutItem> inner) { Inner = inner; }