Example #1
0
 public void Reset()
 {
     Left.Reset();
     Right.Reset();
     InnerLookup = default(LookupDefaultEnumerable <TKeyItem, TRightItem>);
     NeedsYield  = default(GroupingEnumerator <TRightItem>);
     CurrentKey  = default(TLeftItem);
 }
Example #2
0
 public void Dispose()
 {
     Left.Dispose();
     Right.Dispose();
     InnerLookup = default(LookupSpecificEnumerable <TKeyItem, TRightItem>);
     NeedsYield  = default(GroupingEnumerator <TRightItem>);
     CurrentKey  = default(TLeftItem);
 }
Example #3
0
 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);
 }
Example #4
0
 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;
 }
Example #5
0
        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);
        }
Example #6
0
 internal GroupedEnumerator(ref GroupingEnumerator <TOutItem> inner)
 {
     Inner = inner;
 }