public Terminator <TReduction> Complete(TReduction reduction) { var terminator = Next.Complete(reduction); var terminated = CheckTermination(terminator); return(Reduction(terminator.Value, terminated: terminated)); }
/// <summary> /// Pulls values from the supplied TextReader and passes them into the supplied reducer. /// </summary> /// <typeparam name="TReduction">The type of the reduction.</typeparam> /// <param name="reader">The reader.</param> /// <param name="reduction">The reduction.</param> /// <param name="reducer">The reducer.</param> /// <returns>A wrapped reduction.</returns> public static Terminator <TReduction> Reduce <TReduction>( this TextReader reader, TReduction reduction, IReducer <TReduction, string> reducer) { var terminator = Terminator.Reduction(reduction); for (var value = reader.ReadLine(); value != null; value = reader.ReadLine()) { terminator = reducer.Invoke(terminator.Value, value); if (terminator.IsTerminated) { return(terminator); } } return(reducer.Complete(reduction)); }
/// <summary> /// Passes elements from an IEnumerable into the supplied reducer. /// </summary> /// <typeparam name="TInput">The type of the input.</typeparam> /// <typeparam name="TReduction">The type of the reduction.</typeparam> /// <param name="input">The input.</param> /// <param name="reduction">The reduction.</param> /// <param name="reducer">The reducer.</param> /// <returns>A terminated reduction.</returns> public static Terminator <TReduction> Reduce <TInput, TReduction>( this IEnumerable <TInput> input, TReduction reduction, IReducer <TReduction, TInput> reducer) { var terminator = Terminator.Reduction(reduction); foreach (var value in input) { terminator = reducer.Invoke(terminator.Value, value); if (terminator.IsTerminated) { return(terminator); } } return(reducer.Complete(terminator.Value)); }
public Terminator <Reduction> Complete(Reduction reduction) => next.Complete(reduction);
public Terminator <TReduction> Complete(TReduction reduction) => Next.Complete(reduction);
public Task <Terminator <TReduction> > CompleteAsync(TReduction reduction) => Task.FromResult(Reducer.Complete(reduction));