public static TAcc Transduce <TAcc, TIn, TOut>(this IEnumerable <TIn> source, ITransducer <TIn, TOut> transducer, Func <TAcc, TOut, TAcc> reducer, TAcc seed) { var sourceEnum = source.GetEnumerator(); var status = new ReductionStatus(); var res = seed; var red = transducer.Transform(status, reducer); while (!status.Complete && sourceEnum.MoveNext()) { res = red(res, sourceEnum.Current); } return(res); }
public Func <TAcc, TSource, TAcc> Transform <TAcc>(ReductionStatus status, Func <TAcc, TSource, TAcc> reducer) { var prefixComplete = _prefixCompleteFactory(); return((acc, source) => { if (prefixComplete(source)) { status.Complete = true; return acc; } return reducer(acc, source); }); }
public static IEnumerable <TOut> Transduce <TIn, TOut>(this IEnumerable <TIn> source, ITransducer <TIn, TOut> transducer) { var sourceEnum = source.GetEnumerator(); var status = new ReductionStatus(); var red = transducer.Transform <Optional <TOut> >(status, Utils.Enumerator); while (sourceEnum.MoveNext()) { var res = red(new Optional <TOut>(), sourceEnum.Current); if (status.Complete) { break; } if (res.HasValue) { yield return(res.Value); } } }
public Func <TAcc, TSource, TAcc> Transform <TAcc>(ReductionStatus status, Func <TAcc, TSource, TAcc> reducer) { var prefixComplete = _prefixCompleteFactory(); bool skipping = true; return((acc, source) => { if (!skipping) { return reducer(acc, source); } else if (prefixComplete(source)) { skipping = false; return reducer(acc, source); } else { return acc; } }); }
public Func <TAcc, TIn, TAcc> Transform <TAcc>(ReductionStatus status, Func <TAcc, TOut, TAcc> reducer) { return(_transducer1.Transform(status, _transducer2.Transform(status, reducer))); }
public Func <TAcc, TIn, TAcc> Transform <TAcc>(ReductionStatus status, Func <TAcc, TOut, TAcc> reducer) { return((acc, source) => reducer(acc, _selector(source))); }
public Func <TAcc, TSource, TAcc> Transform <TAcc>(ReductionStatus status, Func <TAcc, TSource, TAcc> reducer) { return((acc, source) => _predicate(source) ? reducer(acc, source) : acc); }